2

我有以下类映射 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)。我找不到任何提示如何克服这个问题,我只能想到longLong. 这是一个好主意,还是有一些内置的休眠注释或任何机制来做这些特定的事情?

4

2 回答 2

6

您将类属性定义为原始(长),但您的数据库表包含相应列的空值。提供者 (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;
}
于 2013-03-24T20:42:46.263 回答
1

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

但是,如果(正如我从文件名中怀疑的那样)您将外键显式映射为字段,那么您可能会错过 ORM 在映射关联方面的一些真正优势。

于 2013-03-24T20:57:52.377 回答