Trochę słaby przykład bo dla mnie to jest cały czas obiekt Adress...
Jeśli jednak tak do tego chcesz podejść to powinna tutaj wystapić relacja many to many (wiele ulic może mieć wiele numerów mieszkań).
Wtedy robisz coś takiego:
public class StreetNumber{
@Id
@GeneratedValue
private Long id;
@NonNull
private String number;
@ManyToMany( mappedBy = "name")
private Collection<Street> streets;
}
private class Street {
@Id
@GeneratedValue
private Long id;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "street_numberss",
joinColumns = @JoinColumn(name = "street_id",referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "number_id",referencedColumnName = "id")
)
private Set<StreetNumber> numbers = new HashSet<>();
}
Tak jak mówie dla mnie przykład bez sensu, ale podam Ci to samo zastosowanie dla lepszego przykładu. Masz Usera, który może mieć kilka ról.
@Entity
public class User{
@Id @GeneratedValue
private Long id;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "users_roles",
joinColumns = @JoinColumn(name = "user_id",referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "role_id",referencedColumnName = "id")
)
private Set<Role> roles = new HashSet<>();
@NonNull
private String firstName;
@NonNull
private String lastName;
}
@Entity
public class Role {
@Id
@GeneratedValue
private Long id;
@NonNull
private String name;
@ManyToMany( mappedBy = "roles")
private Collection<User> users;
}