java - JPA @version - 可以用来计算表条目的版本

标签 java jpa jakarta-ee ejb-3.0

请考虑下表(使用相应实体创建)

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 注解用于指定实体类的版本字段或属性,作为其乐观锁值。我认为这与您要寻找的内容没有任何关系。不过,这里有一些想法:

  1. 在插入时使用触发器。
  2. 使用 SQL View 。
  3. 对派生属性使用特定于提供程序的扩展,例如 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/

相关文章:

java - 严重 : Error filterStart++++ SEVERE: Exception starting filter SessionFilter

java - 如何创建一个新的 SequenceGenerator 来生成唯一值?

java - JPA 是否要求数据源来自 JNDI?

java - 需要 JPA/Hibernate 实体上的 setter 来获取 ID 和外部实体

java - InitialContext.lookup 从错误的 context.xml 中获取数据

spring - 如何完全禁用 WebSphere 8.5 类路径扫描?

java - 在 Spring MVC 中存储用户凭据的推荐方法是什么?

java - GAE/J - JPA 错误 - 类型 ("")不是实体的,但需要用于此操作

java - 仅对数组的一半实现快速排序

java - 在 Hadoop 上执行 java 程序