【发布时间】:2017-08-12 15:52:24
【问题描述】:
我有一个持久类,它有一个临时字段,表示该类的 API 版本(我用于 api 请求的字段的子集)。这个字段是@Transient,因为我简单地使用其他字段来创建它。
问题是hibernate使用默认的空构造函数来实例化类和反射来访问字段......所以我不能在构造函数或setter方法的调用上实例化我的瞬态类
我试图注释 getter 方法而不是字段以强制休眠使用 setter,但它不起作用
我尝试在字段中使用@Access(AccessType.PROPERTY),但没有成功
如何强制休眠调用setter方法填充类字段?
@Entity
public class User {
@Transient
private ApiUser tempUser = new ApiUser ();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Access(AccessType.PROPERTY)
@Column(nullable = false)
private String name;
@Access(AccessType.PROPERTY)
@Column(nullable = false, unique = true)
private String username;
@Access(AccessType.PROPERTY)
@Column(nullable = false)
private String userId;
//lots of others fields//
public void setUsername(String username) {
this.username = username;
this.tempUser.setUsername(username);
}
public void setUserId(String userId) {
this.userId = userId;
this.tempUser.setId(Long.parseLong(userId));
}
【问题讨论】: