Связь между типом, атрибутом, экземпляром и значением
m разработка Java-приложения, которое хранит свои данные через Hibernate в базе данных.
Одной из особенностей этого приложения является определение шаблонов, таких как типы и т. Д. Для повторного использования. Например, тип имеет атрибуты, и вы можете создавать экземпляры типа, который имеет значения для атрибутов.
Проблема в том, что я неt знать, как обеспечить присваивание только значениям атрибутов, которые определяет тип. В моем решении есть избыточность, которая вызывает проблему, но я нене знаю, как это удалить.
Мой текущий (и проблемный) подход выглядит так:
@Entity
class Type
{
@Id
@Generated
private Long id;
@OneToMany(mappedBy="type")
private List 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->Тип и AttributeValue->Instance->Тип
Другая идея заключалась в том, чтобы использовать тип + имя атрибута в качестве идентификатора атрибута и экземпляр + имя атрибута в качестве идентификатора значения атрибута, но это неэто решает мою проблему.