sql >> Databasteknik >  >> RDS >> Mysql

Jag försöker göra två olika tabeller med många toner i en kolumn för en enhetsklass

Jag tror att det du letar efter förklaras i Hibernate ORM-avsnittet om @Any anteckning :

@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

Men det kommer inte att skapa några främmande nycklar. Jag tror inte ens är möjligt att skapa två främmande nycklar på samma kolumn för olika tabeller (är det ens vettigt?).

Alternativt, om de två klasserna kan sträcka sig från en gemensam superklass, kan du använda Arvsmappning för att uppnå något liknande.

Till exempel:

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

och sedan

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

Detta kommer dock att skapa tre tabeller. Tabellen UserEntity kommer att ha en främmande nyckel på assignedto_id kolumn. User id och LDAPUser id kommer att ha en begränsning på UserEntity id. I grund och botten, att komma nära det du frågade från början.




  1. Behöver en snabb metod för att konvertera stora mängder dubbel till sträng

  2. cx_Oracle och undantagshantering - god praxis?

  3. Doktrinen består inte entitet med booleska värden och PDO::ATTR_EMULATE_PREPARES =false i Mysql

  4. Tittar på Databas Snapshot Performance