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

时间:2010-05-20 19:36:41

标签: java jpa java-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等连接两个实体,但我无法达到预期的结果。我不想把你和我试过的东西混为一谈。

由于目标很简单,我认为应该有一种更简单的方法吗? 你能帮忙吗? - 任何帮助非常感谢!

提前致谢

1 个答案:

答案 0 :(得分:0)

Version注释用于指定用作乐观锁值的实体类的版本字段或属性。我不认为这与你正在寻找的东西有什么关系。以下是一些想法:

  1. 在插入时使用触发器。
  2. 使用SQL视图。
  3. 使用特定于提供者的扩展来获取派生属性,例如Hibernate的@Formula(此注释允许您将属性映射到SQL表达式而不是表列)。
  4. 为了说明最新的选项,您可以声明如下内容:

    @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; }