Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带注释的hibernate将id/long外键映射到可为空的列_Java_Hibernate_Null_Annotations_Foreign Keys - Fatal编程技术网

Java 带注释的hibernate将id/long外键映射到可为空的列

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

我有以下映射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\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;
}