Java 带注释的hibernate将id/long外键映射到可为空的列
我有以下映射MySQL表的类:Java 带注释的hibernate将id/long外键映射到可为空的列,java,hibernate,null,annotations,foreign-keys,Java,Hibernate,Null,Annotations,Foreign Keys,我有以下映射MySQL表的类: @Entity @Table(name = "category") public class Category { @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name = "id") private long id; @Column(name = "parent_id") private long parentId; 当处理空值为pare
@Entity
@Table(name = "category")
public class Category {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "id")
private long id;
@Column(name = "parent_id")
private long parentId;
当处理空值为parent\u id
column的列时,会出现以下错误:
INFO:HHH000327:执行加载命令时出错:org.hibernate.PropertyAccessException:为com.blogspot.symfonyworld.wealthylaughingduck.model.Category.parentId的基元类型setter的属性分配了Null值
这只是一个java错误:NULL不能分配给
long
类型(private long parentId
)。我找不到任何提示如何克服这个问题,我只能考虑用long
替换long
。这是一个好主意,或者可能有一些内置的hibernate注释或任何机制来完成这项特定工作?您将类属性定义为基元(long),但数据库表包含对应列的空值。提供程序(Hibernate)没有将null映射到原语,因为映射不明确
在数据可能包含空值的情况下,需要使用与之等效的包装类(在本例中为Long)
如果
parentId
可为空,并且需要将其映射为字段,则需要使用包装器类
但是,如果(正如我从文件名中猜测的那样)将外键显式映射为字段,则很可能遗漏了ORM在中的一些真正优势。好的,这就是我的想法。我只是想知道是否有任何附加注释。@tkoomzaaskz-不,不需要附加注释。建议(但不是必需的)使用
@Basic
注释所有原语和包装类型属性。
@Entity
@Table(name = "category")
public class Category {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "id")
private long id;
@Column(name = "parent_id")
private Long parentId;
}