Hibernate计算集合@Formula

时间:2017-11-14 15:07:29

标签: java hibernate jpa kotlin

如果该字段是一个集合(让我们说它是Formula),是否可以使用Set计算字段和实体?

这是我试图实现的虚拟例子:

@Formula(value = 
    "SELECT NEW com.example.entity.Person(p.name, p.age) FROM Person p")
lateinit var people :Set<Person>

1 个答案:

答案 0 :(得分:0)

来自@Formula的JavaDoc:

  

定义一个公式(派生值),它是 SQL片段 ...

您必须将您编写的片段视为select语句中的替换:

SELECT (formulaValue) AS propertyName FROM ....

您可以写入formulaValue的所有内容都可以在@Formula中使用。

您的示例不是有效的SQL片段,正如您所看到的,无法从@Formula返回多个值。

但您可以使用@Subselect和包装器对象:

@Entity
@Subselect("SELECT name, age FROM Person p")
public class PersonWrapper {

  @Id
  private String name;

  private int age;

}

(在Java中,因为我不知道Kotlin的正确语法)

如果您确实需要在另一个实体中收集这些值,则需要加入某些内容(示例中缺少这些内容)并在@OneToMany@ManyToMany中使用该值。否则,在您的实体中使用所有这些值是没有用的,因为所有实体都具有相同的集合。