Hibernate を介してデータベースにデータを保存する Java アプリケーションを開発しています。
このアプリケーションの機能の 1 つは、型などのテンプレートを再利用のために定義することです。たとえば、タイプには属性があり、属性の値を持つタイプのインスタンスを作成できます。
問題は、タイプが定義する属性の値のみを割り当てることができるようにする方法がわからないことです。私のソリューションには、問題の原因となる冗長性がありますが、それを削除する方法がわかりません。
私の現在の(そして問題のある)アプローチは次のようになります。
@Entity
class Type
{
@Id
@Generated
private Long id;
@OneToMany(mappedBy="type")
private List<Attribute> attributes;
//...
}
@Entity
class Attribute
{
@Id
@Generated
private Long id;
@ManyToOne
private Type type;
//...
}
@Entity
class Instance
{
@Id
@Generated
private Long id;
@ManyToOne
private Type type;
//...
}
@Entity
class AttributeValue
{
@Id
@Embedded
private ResourceAttributValueId id;
@Column(name="val")
private String value;
//...
}
@Embeddable
public class ResourceAttributValueId implements Serializable
{
@ManyToOne
private ResourceStateImpl resource;
@ManyToOne
private ResourceAttributeImpl attribute;
//...
}
タイプの定義は冗長です: タイプは AttributeValue->Attribute->Type および AttributeValue->Instance->Type 経由で到達できます
別のアイデアは、タイプ + 属性名を属性の id として使用し、インスタンス + 属性名を属性値の id として使用することでしたが、それは私の問題を解決しません。