有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

临时成员的java hibernate默认值

我有一个临时布尔成员,当我从db中检索实体时,它应该设置为true,但当我创建一个新对象时,它应该设置为false,直到它被持久化为止。保存到db后,该成员应为true。 有一种方法可以让hibernate自动管理它,或者我应该在manager中这样做? 希望下面的代码能澄清我的需求

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) 个答案

  1. # 1 楼答案

    您不需要这个字段,因为您可以从它的id判断实体是否已经被持久化。如果idnull,则它是新的,否则它不是

    如果您确实需要一个方法来检查id字段的存在,那么您只需要一个方法

    在大多数情况下,建议在@Id旁边使用@GeneratedValue,这样Hibernate将为您处理ID

    如果确实需要该字段,请使用id字段在构造函数或setter方法中设置其值(取决于Hibernate使用的内容)

  2. # 2 楼答案

    Basicali Hibernate不会处理@Transient字段。所以你必须控制自己。
    默认情况下,布尔变量为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;
    }
    

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