我有以下类映射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注释或任何机制来完成这个特定的东西?
答案 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的真实力量。