我想配置一个hibernate对象来处理在数据库级别具有默认值的外键。我有一个带有emailFormat列的User对象,它是emailformat类型表的一个键。 User表的emailFormat在数据库级别具有默认设置,并且还具有非空约束。
我的hibernate文件是:
<class
name="User"
table="USER"
>
...
<many-to-one
name="emailFormat"
class="EmailFormat"
not-null="true"
>
<column name="EMAILFORMATID" />
</many-to-one>
我想在不设置emailFormat的情况下创建一个新的User对象,让Hibernate认识到它是一个生成的值。相反,Hibernate尝试为该值插入“null”,插入失败。
ORA-01400:无法插入NULL(“EMAILFORMATID”)
生成属性的文档似乎表明我想要的是不可能的,因为:1。)它看起来只能生成属性,而不是多对一关系的关键; 2.)文档说:
“标记为已生成的属性必须另外是不可插入且不可更新的。”
哪个对我不起作用,因为当db生成默认值时,我需要能够有时更改(覆盖)它们。
有时候我经历过错误的文档,或者有一些没有文档记录或记录不清的方法。我没有找到任何东西在线搜索,但我希望别人知道的更好。
任何方式做我想做的事情?
答案 0 :(得分:0)
不是在数据库级别使用默认值,而是在字段emailFormat
中为域对象(在您的示例中为User)的构造函数中设置defaultvalue。
答案 1 :(得分:0)
Joel Hudon:如果休眠对象是唯一将这些对象插入数据库的东西,那将会奏效,但遗憾的是情况并非如此。必须处理一些遗留的东西,而且,我认为,坚持默认。想让Hibernate与他们很好地合作。
我可以重新定义代码中的所有默认值,并要求任何人实例化一个新的域对象来设置这些默认值(或者在构造函数中执行等),但这意味着要复制默认值的逻辑 - 所有这些现在都存在于DB中。另外,这是额外的工作。希望Hibernate可以很好地发挥。可能没有办法做到这一点。