У меня есть класс сущности MyEntity
, который может быть связан с другим MyEntitys
.Я хочу определить отношения между MyEntitys.Итак, я получил класс как
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Accessors;
import javax.persistence.*;
import java.util.HashMap;
import java.util.Map;
@Data
@NoArgsConstructor
@RequiredArgsConstructor
@Accessors(chain = true)
@Entity
@Table
public class MyEntity {
@Id
@GeneratedValue
private Long id;
@NonNull
private String name;
private String email;
private String phone;
@NonNull
@OneToOne
private MyEntityType myEntityType;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
private Map<String, Address> addresses = new HashMap<>();
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable()
private Map<Relationship, MyEntity> relationships = new HashMap<>();
public MyEntity addAddress(String key, Address address) {
addresses.put(key, address);
return this;
}
public MyEntity addRelationship(Relationship relationship, MyEntity myEntity) {
relationships.put(relationship, myEntity);
return this;
}
}
, где класс отношений выглядит как
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Accessors;
import javax.persistence.*;
@Data
@NoArgsConstructor
@RequiredArgsConstructor
@Entity
@Table
@Accessors(chain = true)
public class Relationship {
@Id
@GeneratedValue
private Long id;
@NonNull
private String name;
@NonNull
private String antonym;
}
Поле, о котором идет речь, - это поле отношений в MyEntity
.
Кажется, что все работает, пока я не удалю MyEntity.Если удаленный MyEntity не имеет отношений, все в порядке.Если удаленный MyEntity
имеет отношения, то MyEntitys
, с которым он связан, также удаляется.
Если я изменю аннотацию @ManyToMany
на
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE})
Тогда соответствующий MyEntitys
больше не удаляются.Это похоже на правильный способ сделать это?