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

时间:2013-03-24 20:39:36

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

我在处理NULL值为parent_id列的列时遇到以下错误:

INFO: HHH000327: Error performing load command : org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of com.blogspot.symfonyworld.wealthylaughingduck.model.Category.parentId

这只是一个java错误:无法将NULL分配给long类型(private long parentId)。我找不到任何提示如何克服这个问题,我只能考虑用long替换Long。这是一个好主意,还是有一些内置的hibernate注释或任何机制来完成这个特定的东西?

2 个答案:

答案 0 :(得分:6)

您将类属性定义为基元(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;
}

答案 1 :(得分:1)

如果parentId可以为空并且您需要将其映射为字段,则需要使用包装类。

但是如果(我怀疑来自提交的名称)你将外键明确地映射为字段,你很可能错过了mapping associations中某些ORM的真实力量。