hibernate-将子类pojoMap到与其父类相同的表

btxsgosb  于 2021-06-24  发布在  Mysql
关注(0)|答案(0)|浏览(287)

在我们的代码中,有两个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允许继承结构保持完整,因为这将大大减少代码重构。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题