如何使用JPA / Hibernate连接获取两个关联?

3

我是Hibernate的新手,非常需要大家的帮助......

我有以下类:UserActionPerUserResult

@Entity
@Table(name = "user_action_per_user_result")
public class UserActionPerUserResult {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name = "user_email", nullable = false)
    private String userEmail;

    @ManyToOne
    @JoinColumn(name = "user_action_id", nullable = false)
    private UserAction userAction;

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name="user_action_per_user_result_email_message",
                  joinColumns={@JoinColumn(name="user_action_per_user_result_id", referencedColumnName="id")},
                  inverseJoinColumns={@JoinColumn(name="email_message_id", referencedColumnName="id")})
    @JsonIgnore
    private List<EmailMessage> emailMessages;

....getters/setter....
}

在MYSQL中,UserActionPerUserResult是一张表,对于电子邮件消息,还有另一张名为UserActionPerUserResultEmailMessage的表,该表与UserActionPerUserResult表中的id相关联。

我已经将所有数据存储在MySQL表中,但无法查询它。我需要编写一个查询来获取emailMessages列表。我尝试了以下方法,但出现异常。

TypedQuery<UserActionPerUserResult> messagesQuery =     entityManager.createQuery(
                    "SELECT e from UserActionPerUserResult e JOIN UserActionPerUserResult.emailMessages e1 WHERE e.id = 1 and e.userAction = 1", UserActionPerUserResult.class);
List<UserActionPerUserResult> resultList = messagesQuery.getResultList();

抛出了什么异常? - shazin
1个回答

3

尝试按照以下方式编写查询:

TypedQuery<UserActionPerUserResult> messagesQuery = entityManager.createQuery(
   "SELECT e from UserActionPerUserResult e JOIN FETCH e.emailMessages em WHERE e.id = 1 and e.userAction.id = 1", UserActionPerUserResult.class);
List<UserActionPerUserResult> resultList = messagesQuery.getResultList();
  1. 连接使用根实体别名
  2. 当与数值匹配时,使用userAction.id来匹配userAction

它可以与此配合使用,但我仍然无法从结果中获取EmailMessages列表。当我执行result.getEmailMessages时,会出现以下异常 - 无法懒惰地初始化角色集合:UserActionPerUserResult.emailMessages,无法初始化代理 - 没有会话。 - Gaurav Sachdeva
是的,它有效!非常感谢,你不知道你的快速回答对我有多大帮助。再次感谢! - Gaurav Sachdeva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接