gpt4 book ai didi

java - 将附加列映射到复合 ID,同时保留其属性映射

转载 作者:行者123 更新时间:2023-12-01 05:43:24 27 4
gpt4 key购买 nike

我使用中间实体类将附加列映射到可连接的列,只要从相关表的两个 fkey 生成 Id,它就可以正常工作。

我想将第三列“修订版”从同一实体类实现到复合 ID 中,并且仍然需要将其与普通属性映射一起使用。复合 ID 映射工作正常,但“修订版”的法线映射则不行。

我没有找到一个好的解决方案,而不使用冗余数据/列来解决这个问题,但我想知道为什么,使用带有额外列的可连接实体类是一种常见的方法?

如果您能提供有关如何正确映射此信息的信息或有关它的信息链接,我将不胜感激,谢谢您的帮助。

“初始 SessionFactory 创建失败。org.hibernate.MappingException:表 backlogaufgabe 中的关联引用了未映射的类:int ”将显示此映射:

<hibernate-mapping package="app.domain">
<class mutable="false" name="app.domain.BacklogAufgabe" table="backlogaufgabe">
<composite-id class="BacklogAufgabe$Id" name="id">
<key-property access="field" column="id_backlog" name="backlogId"/>
<key-property access="field" column="id_aufgabe" name="aufgabeId"/>
<key-property access="field" column="revision" name="revisionId"/>
</composite-id>
<property column="datum" name="datum" not-null="true" type="date"/>
<property column="rang" name="rang" not-null="true" type="int"/>

<property column="revision" name="revision" not-null="true" type="int"/>

<property column="aufw_schaetzung" name="aufwSchaetzung" not-null="true" type="int"/>
<property column="aufw_messung" name="aufwMessung" not-null="true" type="int"/>
<many-to-one cascade="save-update" column="id_aufgabe" insert="false" lazy="false"
name="aufgabe" not-null="true" update="false"/>
<many-to-one cascade="save-update" column="id_backlog" insert="false" lazy="false"
name="backlog" not-null="true" update="false"/>
<many-to-one cascade="save-update" column="revision" insert="false" lazy="false"
name="revision" not-null="true" update="false"/>
</class>
</hibernate-mapping>

SQL:

 CREATE TABLE backlogaufgabe
(
id serial NOT NULL,
id_backlog integer NOT NULL,
id_aufgabe integer NOT NULL,
revision integer NOT NULL,
datum date NOT NULL,
rang integer NOT NULL,
aufw_schaetzung integer,
aufw_messung integer,
CONSTRAINT backlogaufgabe_pkey PRIMARY KEY (id),
CONSTRAINT backlogaufgabe_id_aufgabe_fkey FOREIGN KEY (id_aufgabe)
REFERENCES aufgabe (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT backlogaufgabe_id_backlog_fkey FOREIGN KEY (id_backlog)
REFERENCES backlog (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
WITH (
OIDS=FALSE
);

最佳答案

您应该在创建表时尝试将修订版作为主键。因为正如我在映射文件中注意到的那样,您没有提到已经是主键的 ID ,而是添加了修订版作为主键,而实际表上的情况并非如此。如果你明白我的意思。因此,也许您应该将修订版本而不是 id 作为主键。

试试这个:

CREATE TABLE backlogaufgabe
(
id_backlog integer NOT NULL,
id_aufgabe integer NOT NULL,
revision integer NOT NULL,
datum date NOT NULL,
rang integer NOT NULL,
aufw_schaetzung integer,
aufw_messung integer,
CONSTRAINT backlogaufgabe_pkey PRIMARY KEY (revision),
CONSTRAINT backlogaufgabe_id_aufgabe_fkey FOREIGN KEY (id_aufgabe)
REFERENCES aufgabe (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT backlogaufgabe_id_backlog_fkey FOREIGN KEY (id_backlog)
REFERENCES backlog (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
WITH (
OIDS=FALSE
);

关于java - 将附加列映射到复合 ID,同时保留其属性映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6534304/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com