JPA多对多关系添加方法

时间:2018-02-25 13:35:41

标签: hibernate jpa spring-data-jpa

我想知道何时以及为什么要使用帮助方法' public void addLocation(Location location)'例如,在以下示例中保存包含与另一个实体的多对多关系的实体时:

@Entity
@Table(name = "scope")
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Scope implements Serializable{


    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private @Getter @Setter Long id;

    @Column(name = "name")
    private @Getter @Setter String name;

    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch=FetchType.EAGER)
    @JoinTable(name = "scope_location", joinColumns = @JoinColumn(name = "scope_id"), inverseJoinColumns = @JoinColumn(name = "location_id"))
    Set<Location> locations = new HashSet<>();

public void addLocation(Location location){
        locations.add(location);
        location.scopes.add(this);
    }
}

我见过很多使用&#39;添加&#39;方法和许多不要。

1 个答案:

答案 0 :(得分:1)

辅助方法可确保更新双向关系的两侧。范围具有位置,位置具有范围,并且在内存中立即生效,就像您已经保存并在新会话中加载所有内容一样。在辅助方法中执行此操作可确保只要在任何地方使用辅助方法,它就会始终完成。此外,一些类从公共get方法返回不可变集(包装原始版本),然后你别无选择。如果要添加,则必须使用add方法。我喜欢那样。

手动更新另一面也有效。部分是风格和偏好的问题。但是,我建议选择一个约定并将其跟随给定项目。