Java 使用哪种级联类型,只保存多对多映射的子级列表?
假设实体类Foo和Bar类似:Java 使用哪种级联类型,只保存多对多映射的子级列表?,java,hibernate,jpa,Java,Hibernate,Jpa,假设实体类Foo和Bar类似: class Foo { @ManyToMany @JoinTable(name = "FooBar", joinColumns = @JoinColumn(name = "foo"), inverseJoinColumns = @JoinColumn(name = "bar")) public List<Bar> getBars() { return bars; } }
class Foo {
@ManyToMany
@JoinTable(name = "FooBar",
joinColumns = @JoinColumn(name = "foo"),
inverseJoinColumns = @JoinColumn(name = "bar"))
public List<Bar> getBars() {
return bars;
}
}
class Bar {
// ...
}
我希望
saveOrUpdate
保留对列表的更改,但不保留对实体的更改。我可以吗?CascadeType.PERSIST
可以满足您的需要,但它取决于您的foo对象的启动状态。如果旧foo处于托管状态,则对oldBar所做的更改是持久的。这不能真正“关闭”。如果持久对象不应该更改,为什么要更改它的值?在ORM上下文中,它真的没有意义。我不想更改oldBar,但它的属性被触及,所以可能会变脏。它的lastModifiedDate
由一些实用函数更新。对。我想说的是,如果一个实体的持久字段发生了更改,那么这些更改将进入数据库。如果它变得“脏”了,而这些东西本来不应该出现在数据库中,那么这就是设计中更高层次的问题。
Bar oldBar = foo.getBars().get(0);
oldBar.setSomething("new-value"); // Change to the entity.
Bar newbar = new Bar();
foo.getBars().add(newbar); // Change to the list.
saveOrUpdate(foo);