Связь между типом, атрибутом, экземпляром и значением

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->Тип

Другая идея заключалась в том, чтобы использовать тип + имя атрибута в качестве идентификатора атрибута и экземпляр + имя атрибута в качестве идентификатора значения атрибута, но это неэто решает мою проблему.

Ответы на вопрос(1)

Ваш ответ на вопрос