Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用哪种级联类型,只保存多对多映射的子级列表?_Java_Hibernate_Jpa - Fatal编程技术网

Java 使用哪种级联类型,只保存多对多映射的子级列表?

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; } }

假设实体类Foo和Bar类似:

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);