Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ich versuche, zwei verschiedene Tabellen-Viele-zu-Eins-Zuordnungen in einer einzelnen Spalte für eine Entitätsklasse zu erstellen

Ich denke, wonach Sie suchen, wird im Ruhezustand-ORM-Abschnitt über @Any Anmerkung :

@Any(metaColumn = @Column(name = "userType"))
@AnyMetaDef(name = "PropertyMetaDef", metaType = "string", idType = "long",
            metaValues = {
                    @MetaValue(value = "User", targetEntity = User.class),
                    @MetaValue(value = "LDAP", targetEntity = LDAPUser.class)
            }
    )
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)   
private Object assignedTo

Aber es werden keine Fremdschlüssel erstellt. Ich glaube nicht einmal, dass es möglich ist, zwei Fremdschlüssel in derselben Spalte für verschiedene Tabellen zu erstellen (macht das überhaupt Sinn?).

Wenn die beiden Klassen aus einer gemeinsamen Superklasse hervorgehen könnten, könnten Sie alternativ Vererbungszuordnung um etwas Ähnliches zu erreichen.

Zum Beispiel:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public static class UserEntity {

    @Id
    private Long id;

    ...
}

@Entity
public class User extends UserEntity {
...
}

@Entity
public class LDAPUser extends UserEntity {
...
}

und dann

      @ManyToOne
      @JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)   
      private UserEntity assignedto;

Dadurch werden jedoch drei Tabellen erstellt. Die Tabelle UserEntity wird einen Fremdschlüssel auf assignedto_id haben Säule. User id und LDAPUser id hat jeweils eine Einschränkung für UserEntity Ich würde. Im Grunde nähern Sie sich dem, was Sie ursprünglich gefragt haben.