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

Я разрабатываю 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

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

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

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