请考虑下表(使用相应实体创建)
request
-------
id requestor type version items
1 a t1 1 5
2 a t1 2 3
3 b t1 1 2
4 a t2 1 4
5 a t1 3 9
以上就是我想要实现的目标。版本字段是计算字段,其他字段是用户提供的。 基本上,请求的版本需要根据请求者和类型的组合来计算。给定组合第一次出现时将具有版本 1,然后是版本 2,依此类推。
我在仅包含三列的不同实体上使用 @version 尝试了各种操作,并使用 ManytoOne 等连接两个实体,但我无法获得所需的结果。我不想让你对我尝试过的事情感到困惑。
既然目标很简单,我想应该有一个更简单的方法吧? 你能帮忙吗? - 非常感谢任何帮助!
提前致谢
最佳答案
Version
注解用于指定实体类的版本字段或属性,作为其乐观锁值。我认为这与您要寻找的内容没有任何关系。不过,这里有一些想法:
- 在插入时使用触发器。
- 使用 SQL View 。
- 对派生属性使用特定于提供程序的扩展,例如 Hibernate 的
@Formula
(此注释允许您将属性映射到 SQL 表达式而不是表列)。
为了说明最新的选项,您可以声明如下内容:
@Formula("(select count(r.id)+1 from Request r where r.requestor=requestor and r.type=type and r.id<id)")
public long getVersion() { return version; }
关于java - JPA @version - 可以用来计算表条目的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2877186/