sql >> Database teknologi >  >> RDS >> Mysql

Jeg forsøger at lave to forskellige tabeller, mangetoone-mapping i en enkelt kolonne for en enhedsklasse

Jeg tror, ​​hvad du leder efter, er forklaret i Dvale ORM-sektion om @Any anmærkning :

@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 vil ikke skabe nogen fremmednøgler. Jeg tror ikke engang, det er muligt at oprette to fremmednøgler på samme kolonne til forskellige tabeller (giver det overhovedet mening?).

Alternativt, hvis de to klasser kunne strække sig fra en fælles superklasse, kunne du bruge Tilknytning af arv at opnå noget lignende.

For eksempel:

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

og derefter

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

Dette vil dog oprette tre tabeller. Tabellen UserEntity vil have en fremmednøgle på assignedto_id kolonne. User id og LDAPUser id vil have en begrænsning hver på UserEntity id. Dybest set at komme tæt på det, du oprindeligt bad om.




  1. I CentOS7, kan ikke starte MySQL

  2. MySQL Alter-tabel, tilføj kolonne med unik tilfældig værdi

  3. MySQL View kontroller, om data er NULL

  4. SQL multiple inserts med Python