Hibernate:生成多对一关系的属性?

时间:2011-08-18 21:53:34

标签: java hibernate hibernate-mapping

我想配置一个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生成默认值时,我需要能够有时更改(覆盖)它们。

有时候我经历过错误的文档,或者有一些没有文档记录或记录不清的方法。我没有找到任何东西在线搜索,但我希望别人知道的更好。

任何方式做我想做的事情?

2 个答案:

答案 0 :(得分:0)

不是在数据库级别使用默认值,而是在字段emailFormat中为域对象(在您的示例中为User)的构造函数中设置defaultvalue。

答案 1 :(得分:0)

Joel Hudon:如果休眠对象是唯一将这些对象插入数据库的东西,那将会奏效,但遗憾的是情况并非如此。必须处理一些遗留的东西,而且,我认为,坚持默认。想让Hibernate与他们很好地合作。

我可以重新定义代码中的所有默认值,并要求任何人实例化一个新的域对象来设置这些默认值(或者在构造函数中执行等),但这意味着要复制默认值的逻辑 - 所有这些现在都存在于DB中。另外,这是额外的工作。希望Hibernate可以很好地发挥。可能没有办法做到这一点。