我正在开发一个 Java 应用程序,它通过 Hibernate 将其数据存储在数据库中。
此应用程序的一个功能是定义模板(如类型等)以供重用。例如,类型具有属性,您可以创建具有属性值的类型的实例。
问题是,我不知道如何确保只能分配类型定义的属性值。在我的解决方案中存在导致问题的冗余,但我不知道如何删除它。
我目前的(和有问题的)方法如下所示:
@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,但这并不能解决我的问题。