Связь между типом, атрибутом, экземпляром и значением
Я разрабатываю 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- & gt; Type и AttributeValue- & gt; Instance- & gt; Type
Другая идея заключалась в том, чтобы использовать тип + имя атрибута в качестве идентификатора атрибута и экземпляр + имя атрибута в качестве идентификатора значения атрибута, но это не решает мою проблему.