【发布时间】:2011-08-08 10:40:13
【问题描述】:
我需要帮助来建立下表之间的复杂关系:
这是场景: 1) 1 个 Family 有 N 个 familyTypes(单向) 2)1个家庭有N个familyFields(单向)
编辑:第一个要求是家庭“A”有一定的家庭字段列表,可供family_types使用。例如,家庭“A”在 Family_Fields 的 20 个字段中有 4 个字段。现在,family_type 的每个成员只能使用和配置这 4 个家庭字段,不能使用和配置其他字段。而且,现在每个家族都有一定数量的家族类型。最后,我想在家庭类型的家庭领域拥有 isvisible 属性。
我的问题是,我想要另一个实体(FamilyType+FamilyField 的连接),其中一个家庭字段属于特定的 family_type,但还有 1 个附加字段 (isVisible)。
所以摘录是,family 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,它被映射到这个表对应的字段。
这是架构定义:
为什么没有生成其他两个外键?有什么想法吗?
【问题讨论】:
-
在一个给定的 Family 中,你能有一个没有 FamilyField 的 FamilyType 吗?反过来也一样,在一个给定的家庭中,你能有一个没有家庭类型的家庭字段吗?
-
不,不能。第一个要求是家庭“A”有一个特定的家庭字段列表,可供family_types使用。例如,家庭“A”在 Family_Fields 的 20 个字段中有 4 个字段。现在,family_type 的每个成员只能使用和配置这 4 个家庭字段,不能使用和配置其他字段。而且,现在每个家族都有一定数量的家族类型。最后,我想在家庭类型的家庭字段上拥有 isvisible 属性。
标签: hibernate database-design jpa jpa-2.0