I have bean

@Entity
@Table(name = "Users")
public class User {

@Id
@GeneratedValue
@Column(name = "userId")
private Integer userId;

@Column(name = "username")
private String username;

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "parentId")
@Fetch(value = FetchMode.SUBSELECT)
private List<User> childs;

@Column(name = "password")
private String password;

@Column(name = "email")
private String email;

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "userId")
@Fetch(value = FetchMode.SUBSELECT)
private List<Role> roles;

and an object loaded by hibernate, but before saving all changes to database I need to get current password from database. I am trying to do this

if (user.getPassword() == null) { user.setPassword(userDao.getUserById(user.getUserId()).getPassword());}

but I am getting DuplicateKeyException.

So, how can I do this? Or, can I save all fields except password?

有帮助吗?

解决方案

You could retrieve the data from the database with Hibernate, copy the values from your (detached) bean (coming from your presentation or business layer) into this JPA bean (the one returned by Hibernate), then let Hibernate update the database (at the end of the transaction), or explicitely if you want.

其他提示

You could use the annotation @Column(updatable=false) to exclude the field from database update

you can use Hibernatecallback methods @PrePersist. which does some action before persist there you can write yor fetch password into local transient variable logic.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top