当我尝试将对象包含复合元素保存到DB时,我遇到了问题。
我有下一个数据库结构
创建表"安全"。"用户" (
"ID_USER" INTEGER NOT NULL PRIMARY KEY,
"NAME" VARCHAR(255) NOT NULL,
"PSW_HASH" VARCHAR(255)
)
CREATE TABLE" Security"。" OBJECTS" (
"ID_OBJECT" INTEGER NOT NULL PRIMARY KEY,
"CODE" VARCHAR(50) NOT NULL,
"NAME" VARCHAR(255) NOT NULL
)
创建表"安全"。" USERSOBJECTSRIGHT" (
"ID_USEROBJECT" INTEGER NOT NULL PRIMARY KEY,
"ID_OBJECT" INTEGER NOT NULL REFERENCES Security.OBJECTS(ID_OBJECT),
"ID_USER" INTEGER NOT NULL REFERENCES Security.USERS(ID_USER),
"RIGHT" SMALLINT NOT NULL
)
我将多对多关系映射到我的模型,就像这样
<class name="CPUser"
table="Security.USERS" mutable="true">
<!-- simple property mapping-->
<set name="userRights" table="Security.USERSOBJECTSRIGHT" inverse="true" lazy="false" fetch="select">
<key>
<column name="ID_USER" not-null="true"/>
</key>
<composite-element class="app.domain.CPUserRights">
<many-to-one name="rights" column="ID_OBJECT" class="app.domain.CPRights" lazy="false"/>
<property name="right" type="int" column="RIGHT"/>
</composite-element>
</set>
</class>
<class name="app.domain.CPRights"
table="Security.OBJECTS" mutable="false">
<!-- simple property mapping-->
</class>
<class name="CPUserRights"
table="Security.USERSOBJECTSRIGHT" mutable="true">
<property
name="right"
type="java.lang.Integer"
column="RIGHT"
/>
</class>
读取正常,如果我尝试在User类中更改简单属性(如名称),它们也会在DB中更改。
但是当我尝试为用户改变复合元素中的数据时:
CPUser user = userService.getCPUser(id);
for (CPUserRights rights : user.getUserRights()) {
rights.setRight(2);
}
userService.updateCPUser(user);
此数据不存储到DB。
我不明白为什么。请帮忙。
答案 0 :(得分:0)
找到解决方案:我手动存储复合元素中的数据,就像那样
CPUser user = userService.getCPUser(id);
for (CPUserRights rights : user.getUserRights()) {
rights.setRight(2);
userRightService.updateCPUserRights(rights);
}
// userService.updateCPUser(user);