jpa 自定义的默认列值 class
jpa default column value of custom class
如果我有这样的实体 private Boolean test;
我可以像这样设置它的默认值:@Column(columnDefinition = "boolean default false")
但我的问题是 如何为我的自定义 class 设置默认值?
假设我有一个 User
class,像这样:
public class User {
@Id
@GeneratedValue
Long userID;
String eMail;
@OneToOne(fetch = FetchType.LAZY,targetEntity = LoginCredential.class)
@JoinColumn(name = "userID",referencedColumnName = "userID")
@JsonIgnore
private LoginCredential loginCredential;
}
和 LoginCredential
像这样:
public class LoginCredential {
@Id
@GeneratedValue
Long userID;
String eMail;
@OneToOne(mappedBy = "loginCredential", fetch = FetchType.LAZY)
User user;
};
如何设置默认值 User
,以便在创建 LoginCredential
时也得到 User
。
我尝试 User user=new User()
并在构造函数中进行设置。两者都给了我例外。
异常:
org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.mua.cse616.Model.LoginCredential.user -> com.mua.cse616.Model.User
我该如何解决这个问题?
您需要使用 JPA 实体关系在 LoginCredential
的 user
字段和 User
class 之间进行映射。
阅读:
- Multiplicity in Entity Relationships 在 Oracle 的 JavaEE 7 教程中
Hibernate 用户指南中的 - Entity Associations
在用户 class 中:
public static User defaultUser(){
return new User();// or any user you want to use
// just don't use the id field, else it will start populating the user database, then it won't be the same value right.. ;)
}
现在您保存 LoginCredential 的地方,只需将 User.defaultUser() 放在那里。
有效,我已经做到了
如果我有这样的实体 private Boolean test;
我可以像这样设置它的默认值:@Column(columnDefinition = "boolean default false")
但我的问题是 如何为我的自定义 class 设置默认值?
假设我有一个 User
class,像这样:
public class User {
@Id
@GeneratedValue
Long userID;
String eMail;
@OneToOne(fetch = FetchType.LAZY,targetEntity = LoginCredential.class)
@JoinColumn(name = "userID",referencedColumnName = "userID")
@JsonIgnore
private LoginCredential loginCredential;
}
和 LoginCredential
像这样:
public class LoginCredential {
@Id
@GeneratedValue
Long userID;
String eMail;
@OneToOne(mappedBy = "loginCredential", fetch = FetchType.LAZY)
User user;
};
如何设置默认值 User
,以便在创建 LoginCredential
时也得到 User
。
我尝试 User user=new User()
并在构造函数中进行设置。两者都给了我例外。
异常:
org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.mua.cse616.Model.LoginCredential.user -> com.mua.cse616.Model.User
我该如何解决这个问题?
您需要使用 JPA 实体关系在 LoginCredential
的 user
字段和 User
class 之间进行映射。
阅读:
- Multiplicity in Entity Relationships 在 Oracle 的 JavaEE 7 教程中 Hibernate 用户指南中的
- Entity Associations
在用户 class 中:
public static User defaultUser(){
return new User();// or any user you want to use
// just don't use the id field, else it will start populating the user database, then it won't be the same value right.. ;)
}
现在您保存 LoginCredential 的地方,只需将 User.defaultUser() 放在那里。
有效,我已经做到了