【问题标题】:How to join fetch two associations with JPA/Hibernate如何加入获取两个与 JPA/Hibernate 的关联
【发布时间】:2015-07-06 15:41:44
【问题描述】:

我是 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();

【问题讨论】:

  • 抛出了什么异常?

标签: java mysql hibernate jpa hibernate-mapping


【解决方案1】:

尝试像这样编写查询:

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,无法初始化代理 - 没有会话
  • 是的,它有效!....非常感谢,您不知道,您的快速回答对我有多大帮助。再次感谢!
猜你喜欢
  • 2013-02-27
  • 2018-09-12
  • 2012-01-11
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
  • 2019-03-29
相关资源
最近更新 更多