Hibernate:SQL查询生成的值

时间:2010-08-09 12:18:27

标签: sql hibernate insert generated

我希望Hibernate 3.3.0通过在SELECTINSERT)之前执行persist()查询来生成值。哪个会这样工作:

@Generated(GenerationTime.INSERT)
@GenerateSQL("SELECT RANDOM() * 2")
private int number;

我看过@Generated(),这对TRIGGER有好处。我不想引入触发器。

我也看了@Formula,这是只读的。

那么,注释的正确组合是什么?感谢。

1 个答案:

答案 0 :(得分:1)

  

我希望Hibernate 3.3.0通过在INSERT

之前执行SELECT查询来生成值

我认为这不受支持。

备选方案#1:您可以直接在代码中执行SELECT作为“创建”逻辑的一部分。

备选方案#2:使用Hibernate拦截器,提供对SessionFactory的引用,并在onSave期间从拦截器执行SELECT。

  

那么,正确的注释组合是什么?

实际上不支持设置默认值(请参阅HHH-4341),最简单的解决方案是IMO在列级别定义DEFAULT值。这将是我的替代#3 。下面是一个例子:

@Generated(GenerationTime.INSERT)
@Column(insertable=false, columnDefinition="INT DEFAULT 20") 
private int someNumber;

我不知道这是否适合您,我不确定数据库是否支持在DEFAULT中使用RANDOM()RANDOM() * 2如何成为{{1} }} 顺便说说?)。