我有一个临时布尔成员,当我从db检索实体时应该设置为true,但是当我创建一个新对象直到它被持久化时它应该是false。保存到db后,成员应该成为true。 有一种方法可以让hibernate自动管理它,还是应该在管理器中进行管理? 希望以下代码能够澄清我的需求。
class MyEntity(){
@Id
Integer id;
@Transient
boolean required;
}
class Test(){
MyEntity entity1 = new MyEntity();
assertFalse(entity1.required);
persist(entity1);
assertTrue(entity1.required);
MyEntity entityAlreadySaved = getMyEntityWithID(1);
assertTrue(entityAlreadySaved.required);
}
答案 0 :(得分:2)
您不需要此字段,因为您可以从id
告知实体是否已经保留。如果id
为null
,则为新的,否则为新的。
如果你确实需要一个检查id
字段是否存在的方法,你只需要一个方法。
在大多数情况下,建议在@GeneratedValue
旁边使用@Id
,以便Hibernate为您处理ID。
如果您确实需要该字段,请使用id
字段在构造函数或setter方法中设置其值(取决于Hibernate使用的内容)。
答案 1 :(得分:1)
Basicaly Hibernate不会处理@Transient字段。所以你必须自己处理。
默认情况下,boolean变量保持false。如果你想设置它,那么你必须根据亚当的答案来判断逻辑
例如
class MyEntity{
@Id
Integer id;
@Transient
boolean required;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public boolean isRequired() {
if (getId() == null){
setRequired(false);
}else{
setRequired(true);
}
return required;
}
public void setRequired(boolean required) {
this.required = required;
}
}
你必须单独处理删除逻辑