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.