临时成员的休眠默认值

时间:2013-12-11 14:51:34

标签: java hibernate

我有一个临时布尔成员,当我从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);
}

2 个答案:

答案 0 :(得分:2)

您不需要此字段,因为您可以从id告知实体是否已经保留。如果idnull,则为新的,否则为新的。

如果你确实需要一个检查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;
}

}
你必须单独处理删除逻辑