要使用什么级联类型,只保存多对多映射的子项列表?

时间:2011-09-13 03:47:49

标签: 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 Bar {
    // ...
}

当我保存Foo实体时,我也想保存条形图列表,但只保存映射列表,例如:

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

我希望saveOrUpdate将更改保留在列表中,但不会更改实体。我可以吗?

1 个答案:

答案 0 :(得分:2)

CascadeType.PERSIST可以做你想要的,但它取决于你的foo对象的起始状态。如果旧的foo处于托管状态,那么对oldBar所做的更改是持久的。这真的不能“关闭”。如果不应该更改持久对象的值,为什么还要更改它?在ORM环境中它没有意义。