Я знаю, что этот вопрос очень старый, но, возможно, это может кому-то помочь.
Другая возможность - что-то вроде этого:
@Entity
@Table(name = "PREFERENCE", uniqueConstraints = { @UniqueConstraint(columnNames = { "ID_DOMAIN", "ID_USER", "KEY" })})
public class Preferences {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID", unique = true, nullable = false)
private Long id;
@Column(name = "ID_DOMAIN", unique = false, nullable = false")
private Long domainId;
@Column (name = "PREFERENCE_KEY")
@Enumerated(EnumType.STRING)
private PreferenceKey key;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID_USER", referencedColumnName = "ID")
private User user;
}
and
@Entity
@Table(name = "USER", uniqueConstraints = { @UniqueConstraint(columnNames = { "ID_DOMAIN", "LOGIN" })})
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID", unique = true, nullable = false)
private Long id;
@Column(name = "ID_DOMAIN", unique = false, nullable = false")
private Long domainId;
// more fields
@ElementCollection(fetch = FetchType.LAZY)
@JoinColumns({@JoinColumn(name = "ID_USER", referencedColumnName = "ID"), @JoinColumn(name = "ID_DOMAIN", referencedColumnName = "ID_DOMAIN")})
@OneToMany(targetEntity = Preferences.class, fetch = FetchType.LAZY)
@MapKey(name = "key")
private Map<PreferenceKey, Preferences> preferencesMap;
}
Это создает только две таблицы User и Preferences, обратите внимание, что PreferenceKey уникален для пользователя в домене