java - 带注释的 Hibernate 映射 id/长外键到可为空列

标签 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;

在处理 parent_id 列具有 NULL 值的列时,我收到以下错误:

信息:HHH000327:执行加载命令时出错:org.hibernate.PropertyAccessException:空值已分配给 com.blogspot.symfonyworld.wealthylaughingduck.model.Category.parentId 的原始类型 setter 的属性

这只是一个java错误:NULL不能分配给long类型(private longparentId)。我找不到任何提示如何克服这个问题,我只能想到用 Long 替换 long 。这是一个好主意还是可能有一些内置的 hibernate 注释或任何机制来执行此特定操作?

最佳答案

您将类属性定义为基元(long),但您的数据库表包含相应列的空值。提供程序 (Hibernate) 不会将 null 映射到原语,因为映射不明确。

如果您的数据可能包含空值,您需要使用等效的包装类(在本例中为 Long)。

@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;
}

关于java - 带注释的 Hibernate 映射 id/长外键到可为空列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15603717/

相关文章:

java - chalice /hibernate : No row with the given identifier exists

c++ - 如何在运行时将指针设置为 Null (C++)

c# - 返回为 null 的二维数组

Java ListSelectionListener 双重改变值

java - setVisibilty() 未按预期工作

java - 使用Java运行cmd命令

php - 如果变量为空,我希望 PHP/MySQL 为变量分配不同的值

java - 如果一个类扩展了另一个类,是否可以初始化扩展类而不是扩展它?

java - Hibernate hql 子字符串函数在 postgres 和 oracle 中的行为不同?

java - JPA:获取所有抛出空指针异常的行