sql >> Database >  >> RDS >> Mysql

ik probeer twee verschillende tabel Manytoone-toewijzing in één kolom te maken voor één entiteitsklasse

Ik denk dat wat je zoekt wordt uitgelegd in de Overwinteren ORM-sectie over @Any annotatie :

@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

Maar er worden geen externe sleutels gemaakt. Ik denk niet eens dat het mogelijk is om twee externe sleutels op dezelfde kolom te maken voor verschillende tabellen (heeft het zelfs zin?).

Als alternatief, als de twee klassen zich zouden kunnen uitbreiden van een gemeenschappelijke superklasse, kunt u Overervingstoewijzing om iets soortgelijks te bereiken.

Bijvoorbeeld:

@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 {
...
}

en dan

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

Dit zal echter drie tabellen maken. De tabel UserEntity heeft een externe sleutel op de assignedto_id kolom. User id en LDAPUser id heeft elk een beperking op UserEntity ID kaart. Kortom, in de buurt komen van wat je oorspronkelijk vroeg.




  1. Na een PostgreSQL-herstel, krijg ik toestemming geweigerd voor relatie django_session

  2. PHP PDO multiple select-query laat consequent laatste rijenset vallen

  3. unieke kolomwaarden berekenen in mysql

  4. De snelste manier om te controleren of sommige records in een databasetabel staan?