繁体   English   中英

Hibernate 从数据库更新 java 对象字段

[英]Hibernate update java object field from database

我有豆

@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;

和一个由休眠加载的对象,但在将所有更改保存到数据库之前,我需要从数据库中获取当前密码。 我正在尝试这样做

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

但我收到 DuplicateKeyException。

那么,我该怎么做呢? 或者,我可以保存除密码以外的所有字段吗?

您可以使用 Hibernate 从数据库中检索数据,将您的(分离的)bean(来自您的表示或业务层)中的值复制到这个 JPA bean(由 Hibernate 返回的那个)中,然后让 Hibernate 更新数据库(在交易结束),或者如果您愿意,可以明确表示。

您可以使用注释@Column(updatable=false)从数据库更新中排除该字段

您可以使用 Hibernatecallback 方法@PrePersist。 在坚持之前执行一些操作,您可以将您的密码写入本地瞬态变量逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM