【问题标题】:How do I write this JPA query that requires a JOIN?如何编写需要 JOIN 的 JPA 查询?
【发布时间】:2013-09-12 20:44:06
【问题描述】:

我正在使用 JPA 2.0、Hibernate 4.1.0.Final 和 Spring 3.1.1.RELEASE。我有两个实体:

@Entity
@Table(name = "user",
    uniqueConstraints = { @UniqueConstraint(columnNames = { "USER_NAME" }) }
)
public class User implements Comparable<User>, Serializable
{
    ...
    @Column(name = "first_name")
    @NotNull
    /* the first name of the User */
    private String firstName;

@Entity
@Table(name="code_user",
    uniqueConstraints = { 
        @UniqueConstraint(columnNames = { "SAMPLE_WORD_ID", "USER_ID" }) }
)
public class CodeUser 
{

    @Id
    @NotNull
    @GeneratedValue(generator = "uuid-strategy")
    @Column(name = "ID")
    private String id;

    @ManyToOne
    @JoinColumn(name = "CODE_ID", nullable = false, updatable = true)
    private Code code;

    @ManyToOne
    @JoinColumn(name = "USER_ID", nullable = false, updatable = true)
    private User user;

如何编写 JPA/CriteriaBuilder 查询来查找名字与“Dave”匹配且与代码为“abode”的代码记录相关联的所有用户对象?

【问题讨论】:

    标签: spring hibernate jpa join jpa-2.0


    【解决方案1】:

    我可能错过了一个 HQL 语法元素

    SELECT user FROM CodeUser codeUser 
        JOIN FETCH codeUser.user user
        JOIN FETCH codeUser.code code 
            WHERE user.firstName = 'Dave' AND code.value = 'abode'
    

    假设Code 有一个字段value 保存值"abode"。您可能不需要FETCH

    您始终可以将文字值替换为 ? 之类的占位符或 :name 之类的命名占位符,并从 Query 对象中设置它们的值。

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 2017-11-23
      • 2011-03-22
      • 2010-09-24
      • 2012-11-01
      • 2019-08-20
      • 2021-05-01
      • 2017-06-10
      • 1970-01-01
      相关资源
      最近更新 更多