在ManyToOne关系中,Hibernate处理long 0值而不是NULL

时间:2011-11-07 15:40:44

标签: java hibernate null zero

我使用Hibernate访问旧版数据库。对于某些表,不强制执行父子引用完整性,并且对子表中的某些“父”列使用long 0值而不是NULL来表示“无父级”。

我仍然希望在@ManyToOne@OneToMany字段中使用这些关系,但得到EntityNotFound错误,因为0值与主表中的任何记录都不对应。

我有什么选择?

3 个答案:

答案 0 :(得分:8)

答案 1 :(得分:0)

您可以将其映射到java.lang.Long,其默认值为null。或者,如果@PostLoad,您可以使用0并将其归零。您也可以使用@Formula并忽略0

@Formula中写的join conditions可用于id_fk is not null or id_fk <> 0

由于我不知道提供有效示例的数据模型很棘手。试试:

show_sql

块。

如果它不符合您的需求,您可以自己编写documentation

如果您正在使用某种日志记录,请启用org.hibernate.sql属性。并将DEBUG {{1}}添加到您的配置中。

答案 2 :(得分:0)

而不是@JoinColumn可以使用@JoinFormula。喜欢这个

@JoinFormula(value="CASE the0isNullColumn WHEN 0 THEN NULL ELSE the0isNullColumn END")

表达式意味着我们检查列以及它是否返回NULL。然后,hibernate不会搜索相关实体。