如何在Spring Data JPA中存储关系?

时间:2015-05-28 08:15:58

标签: java spring jpa spring-data-jpa

我有两个具有多对多关系的实体:

@Entity
public class Entity1 {

    @Id
    @GeneratedValue
    private long id;

    // Some other fields

    @ManyToMany
    @JoinTable(
        name = "e1_e2",
        joinColumns = { @JoinColumn(name = "e1_id", referencedColumnName = "id") },
        inverseJoinColumns = { @JoinColumn(name = "e2_id", referencedColumnName = "id") }
    )
    private Set<Entity2> e2s = new HashSet<>();

    // Getters & setters

}

@Entity
public class Entity2 {

    @Id
    @GeneratedValue
    private long id;

    // Some other fields

    @ManyToMany(mappedBy = "e2s")
    private Set<Entity1> e1s = new HashSet<>();

    // Getters & setters

}

我有一个包含Entity2表单的网页。当我从多选中选择一些Entity1并提交表单时, 我可以在控制器内看到所有选定的Entity1都存储在e1s中。然后,我尝试使用Entity2保留新的JpaRepository::save()Entity2会被保留,但不会与Entity1建立关系。 save()调用包含在注释的服务方法中 与@Transactional。为什么这种关系不会持续存在?

这是接收Entity2

的控制器方法
@RequestMapping(method = RequestMethod.POST)
public String createSupplier(@ModelAttribute final Entity2 e2) {
    service.create(e2);

    return "redirect:/";
}

服务方法:

@Transactional
public Entity2 create(Entity2 e2) {
    return repository.save(e2);
}

1 个答案:

答案 0 :(得分:0)

将e1s的注释更改为@ManyToMany(cascade=CascadeType.ALL),以便将保存操作级联到相关实体。见http://docs.oracle.com/cd/E19798-01/821-1841/bnbqm/index.html