1

我希望 Hibernate 3.3.0 通过在( )SELECT之前执行查询来生成值。这会像这样工作:INSERTpersist()

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

我看过了@Generated(),这对s有好处TRIGGER。我不想介绍触发器。

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

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

4

1 回答 1

1

我希望 Hibernate 3.3.0 通过在 INSERT 之前执行 SELECT 查询来生成一个值

我不认为这是支持的。

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

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

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

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

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

我不知道这是否适合您,并且我不确定RANDOM()数据库是否支持在 DEFAULT 中使用(顺便说一句,怎么可能RANDOM() * 2成为int?)。

于 2010-08-09T17:03:17.730 回答