Hibernate:带有非空列的可选多对一

发布于 2024-12-28 18:57:19 字数 1186 浏览 1 评论 0原文

我在两个类之间有一个可选的多对一关系。 Hibernate 通过将外键设置为 null 将该属性转换为可选属性。

我的数据库模式不允许列为空。可选属性由这些列的默认值表示。

<class name="sth.Alpha" ...>
    ....
    <many-to-one name="beta" not-found="ignore" class="sth.Beta" insert="true" update="true">
        <column name="a1/>
        <column name="a2/>
    </many-to-one>
</class>

<class name="sth.Alpha" ...>
    <composite-id>
        <key-property name="b1" type="int">
            <column name="b1" precision="8" scale="0"/>
        </key-property>
        <key-property name="b2" type="int">
            <column name="b2" precision="8" scale="0"/>
        </key-property>
    </composite-id>
</class>

选择数据没有问题,因为 may-to-one-tag 中的 not-found="ignore" 会导致 null-beta-对象。但如果我想插入一个 Alpha 呢?将 beta 设置为 null。我收到异常,无法将 null 插入到 a1a2 中。

如果我将 insertupdate 设置为 false,我就可以摆脱这个问题。但这会导致在设置后不会保存关系。

数据库架构无法更改,Hibernate 版本固定为 3.5

如果您告诉我这是不可能的,我也会很高兴

I've got an optional many-to-one relationship between two classes. Hibernate translates the property to be optional by setting the foreign keys to null.

My db-schema does not allow the columns to be null. The property to be optional is represented by the default-value of these columns.

<class name="sth.Alpha" ...>
    ....
    <many-to-one name="beta" not-found="ignore" class="sth.Beta" insert="true" update="true">
        <column name="a1/>
        <column name="a2/>
    </many-to-one>
</class>

<class name="sth.Alpha" ...>
    <composite-id>
        <key-property name="b1" type="int">
            <column name="b1" precision="8" scale="0"/>
        </key-property>
        <key-property name="b2" type="int">
            <column name="b2" precision="8" scale="0"/>
        </key-property>
    </composite-id>
</class>

selecting data is no problem because of not-found="ignore" in the may-to-one-tag it will result in a null-beta-object. But if I want to insert an Alpha? with beta set to null. I get an Exception, that it is not possible to insert null to a1 and a2.

I get rid of that problem if I set insert and update to false. But this results in not saving the relationship if it is set.

Database-Schema cannot be changed and Hibernate-version is fixed to 3.5

I would also be happy if you tell me, that it is not possible

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

花心好男孩 2025-01-04 18:57:19

如何使用 0 而不是 null 结合使用可能会有所帮助

其他解决方案

how to use 0 instead of null in conjunction with <id unsavedvalue="whatever"> might help

or

other solution

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文