在我们的代码中,有两个java类:
public class MailMessage {
private String id;
private String message;
private String sentTime;
// getters and setters
}
public class MailMessageWithRecipients extends MailMessage {
private String recipients;
// getter and setter for recipients
}
分离收件人列表的目的是,因为它可能非常大,所以我们希望尽可能避免加载它。我们希望能够将mailmessage和mailmessagewithrecipientsMap到一个表; mail_messages
. 但是,如果我在hibernateMap文件中尝试这样做-
<class name="MailMessage" table="mail_messages" dynamic-insert="true" dynamic-update="true">
<id name="id" column="message_id" length="32">
<generator class="uuid" />
</id>
<property name="message" column="message" />
<property name="sentTime" column="sentTime" />
</class>
<class name="MailMessageWithRecipients" table="mail_messages" dynamic-insert="true" dynamic-update="true">
<id name="id" column="message_id" length="32">
<generator class="uuid" />
</id>
<property name="message" column="message" />
<property name="sentTime" column="sentTime" />
<property name="recipients">
<column name="recipients" sql-type="longblob" />
</property>
</class>
然后写一个类似这样的查询:
Query query = session.createQuery("from MailMessage where id = :id");
query.setParameter("id", id);
MailMessage message = query.uniqueResult();
当执行查询时,我得到一个“org.hibernate.ununiqueresultexception:query did not return an unique result”异常,即使mail\u messages表中只有一行。我怀疑这是因为它将该行同时视为mailmessage和mailmessagewithrecipients。在维护父子java关系的同时,有没有办法将这两个对象Map到同一个表?我看到的相关讨论建议在Map文件中使用组件关系,但在我看来,这将涉及删除继承结构,并将mailmessagewithrecipients转换为mailmessage的facade结构。如果这是唯一的方法,我会这样做,但我想知道是否有一个Map允许继承结构保持完整,因为这将大大减少代码重构。
暂无答案!
目前还没有任何答案,快来回答吧!