【问题标题】:hibernate inheritance mapping single_table with a property of boolean type具有布尔类型属性的休眠继承映射 single_table
【发布时间】:2015-01-26 17:49:49
【问题描述】:

我的实体有这个层次结构:

TreeItem
LayerItem extends TreeItem
TypicalItem extends TreeItem

树项:

@Entity
@Table(name = "tree_item")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
    name = "item_type",
    discriminatorType = DiscriminatorType.STRING
)
@DiscriminatorValue("tree_item")
public class TreeItem implements Serializable {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Basic(optional = false)
   private Long id;

   public Long getId() {
     return id;
   }

   public void setId(Long id) {
     this.id = id;
   }
   ........
}

继承类型是SINGLE_TABLE
LayerItem 有一个布尔类型的属性“启用”。

图层项目:

 @Entity
@DiscriminatorValue("layer_item")
public class LayerItem extends TreeItem {

   @Column(nullable = true)
   private boolean enabled = false;

   @Column
   private String position;

   @PrePersist
   public void prePersist() {
       if (JUtil.isEmpty(this.enabled)) //We set default value in case if the value is not set yet.
       {
          this.enabled = false;
       }
   }
}

问题是,当我想坚持 TypicalItem(taht 没有 enabled 属性)时,我遇到了这个错误:

org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of my.app.entity.LayerItem.enabled

我已经给它设置了一个默认值(false),但是没有效果。

【问题讨论】:

    标签: java hibernate inheritance nullable hibernate-annotations


    【解决方案1】:

    原始boolean 不能是null。因此,您必须将其更改为 Boolean 对象或使其不可为空:

       @Column(nullable = true)
       private Boolean enabled = false;
    

    或者

       @Column(nullable = false)
       private boolean enabled = false;
    

    【讨论】:

    • 谢谢!第一个解决方案解决了这个问题。默认值(private boolean enabled=false)无效。
    猜你喜欢
    • 2019-07-05
    • 1970-01-01
    • 2011-09-05
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多