Мне нужна помощь для построения сложных отношений между следующими таблицами:
Вот сценарий: 1) 1 семья имеет N familyTypes (однонаправленный) 2) 1 семья имеет N familyFields (однонаправленный)
РЕДАКТИРОВАТЬ: Первое требование - это семейство "A" имеет определенный список полей семейства, которые могут использоваться в family_types.Например, семейство «А» имеет 4 поля из 20 полей Family_Fields.Теперь каждый член family_type может использовать и настраивать только эти 4 поля семейства, но не другие.Кроме того, теперь каждая семья имеет определенное количество типов семей.В конце я хочу иметь свойство isvisible в семейном поле семейного типа семьи.
Моя проблема заключается в том, что я хочу иметь другое юридическое лицо (объединение FamilyType + FamilyField), где одно семейное поле принадлежитконкретный тип family_type, но имеет еще 1 дополнительное поле (isVisible).
Таким образом, выдержка состоит в том, что семейство x имеет тип y, а y имеет a, b family_fields, где a является видимым, а b невидимым для типа y.
Я попытался получить join_table и сделать его классом сущности с дополнительным полем.Но это выглядит беспорядком.
Есть ли другой способ сделать это?Вот что я делаю так:
Family f = getFamily("X");
FamilyTypes ft = f.getTypes();
FamilyFields ff = f.getFields();
SomeEntity = ft.getFieldConfiguarations(); // problem is hwo to do this
Я не могу поместить это дополнительное поле в FamilyType, так как многие другие FamilyType могут использовать это поле
Я запутался: (
Хорошо, после некоторой попытки я подключился к следующему классу:
@Entity
@IdClass(FieldConfiguarationPk.class)
public class FieldConfiguaration implements Serializable{
@Id
@Column(name = "FAMILY_ID")
private Long familyId;
@Id
@Column(name = "FAMILY_TYPE_ID")
private Long familyTypeId;
@Id
@Column(name = "FAMILY_FIELD_ID")
private Long familyFieldId;
@Column(name = "REQUIRED")
private boolean isRequired;
@Column(name = "HELP")
private boolean isHelpAvailable;
@ManyToOne
@JoinColumn(name = "FAMILY_ID", insertable = false, updatable = false, referencedColumnName ="Id")
private Family family;
@ManyToOne
@JoinColumn(name = "FAMILY_TYPE_ID", insertable = false, updatable = false, referencedColumnName = "Id")
private FamilyType familyType;
@ManyToOne
@JoinColumn(name = "FAMILY_FIELD_ID", insertable = false, updatable = false, referencedColumnName = "Id")
private FamilyField familyField;
/*getter,setter*/
Но моя проблема в том, что создается только внешний ключ с FAMILY_TYPE_ID
, а не другие два. У меня также есть@OneToMany
в другой таблице, которая сопоставлена этой таблицей с соответствующими полями.
Вот определение схемы:
ПОЧЕМУ ДРУГИЕ ДВУХ ИНОСТРАННЫХ КЛЮЧЕЙ НЕТСОЗДАНО? ЛЮБАЯ ИДЕЯ?