두 모델 : User
및 Room
있습니다. 사용자는 많은 방에 속하며 방에는 많은 사용자가 있습니다.
현재 내가 찾거나 그를 생성하거나,ddd에 많은 관계 많은 모델
public class User extends BasePersistable {
private static final long serialVersionUID = 1492535311821424305L;
@Column(nullable = false, unique = true)
private String login;
@Column(nullable = false)
private Integer uid;
@ManyToMany(targetEntity = Room.class)
@JoinTable(name = "room_users", joinColumns = {@JoinColumn(name = "user_id")}, inverseJoinColumns = {@JoinColumn(name = "room_id")})
private Set<Room> rooms = new HashSet<>();
및
public class Room extends AbstractAggregateRoot implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private Long id;
@ManyToMany(mappedBy = "rooms", targetEntity = User.class, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE})
@JsonIgnore
private Set<User> users = new HashSet<>();
사용자가 로그인
이 있고, 나는 몇 가지 규칙에 따라 그를 위해 방을 찾거나 만들 수 있습니다.나에게는 두 가지 사항이 매우 명확합니다.
1) 방이 많은 메시지가 있고 메시지가 방이 없으면 존재하지 않으므로 방은 집계입니다.
2) 사용자는 회의실 범위 밖에서 조작해야하므로 사용자도 전체 루트 여야합니다.
그래서 여기에 문제가 있습니다. 나는 합계 루트가 (값 개체를 통해서만) 다른 집계 루트를 참조하지 않는다는 것을 배웠습니다. 집계 루트는 외부 소스 (이 경우 사용자 집계 루트)에 의존하지 않고 존재해야하는 모든 것을 포함해야합니다.
어떻게 이러한 관계를 만들 수 있습니까? 사용자가 로그인 한 후에 내가 그를 위해 필요한 방을 어떻게 만들 수 있습니까? 나는 이벤트를 게시 할 수 있다고 생각하고 있었는데이 (UserCreatedEvent
)을 기반으로 방을 만들었습니다 ... 올바른 방향으로 가고 있습니까?
정말 좋은 방법입니다 ... 나는 그것에 잠을 자고, 내가 뭘 할 수 있는지 보자! 그러나 하나의 질문 : ID가없는 경우 어떻게 관계를 구축 할 수 있습니까?이 정보를 저장해야합니다. –
@ElementCollection을 살펴보아야합니다. 이것이 전체 Project에서 오류로 가득 찬 japa 플러그인을 사용하지 못한다면 JPA Entity로 모델링 할 수 있습니다. 데이터베이스에 ID를 저장하는 기술 ID가 있다고해서 도메인에 ID가 있다는 것을 의미하지는 않습니다. ... id 필드를 비공개로 만들고 setter/getter -methods를 id에 추가하지 않아도됩니다. – EasterBunnyBugSmasher