Beziehung zwischen Typ, Attribut, Instanz und Wert

Ich entwickle eine Java-Anwendung, die ihre Daten über den Ruhezustand in einer Datenbank speichert.

Eine Funktion dieser Anwendung besteht darin, Vorlagen wie Typen usw. für die Wiederverwendung zu definieren. Zum Beispiel hat der Typ Attribute und Sie können Instanzen eines Typs erstellen, der Werte für die Attribute enthält.

Das Problem ist, dass ich nicht weiß, wie ich sicherstellen soll, dass nur Werte für Attribute zugewiesen werden können, die der Typ definiert. In meiner Lösung gibt es eine Redundanz, die das Problem verursacht, aber ich weiß nicht, wie ich es beseitigen soll.

Mein aktueller (und problematischer) Ansatz sieht folgendermaßen aus:

@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;

    //...
}

Dort ist die Definition des Typs redundant: Typ ist über AttributeValue-> Attribute-> Type und AttributeValue-> Instance-> Type erreichbar

Eine andere Idee war, Typ + Attributname als ID des Attributs und Instanz + Attributname als ID des Attributwerts zu verwenden, aber das löst mein Problem nicht.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage