Mysql
 sql >> Base de données >  >> RDS >> Mysql

j'essaie de créer deux tables différentes mappage manytoone dans une seule colonne pour une classe d'entité

Je pense que ce que vous recherchez est expliqué dans le Section ORM Hibernate à propos de @Any annotation :

@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

Mais cela ne créera aucune clé étrangère. Je ne pense même pas qu'il soit possible de créer deux clés étrangères sur la même colonne pour différentes tables (est-ce que cela a du sens ?).

Alternativement, si les deux classes peuvent s'étendre à partir d'une super classe commune, vous pouvez utiliser Mappage d'héritage pour réaliser quelque chose de similaire.

Par exemple :

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

puis

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

Cela créera cependant trois tables. La table UserEntity aura une clé étrangère sur le assignedto_id colonne. User identifiant et LDAPUser id aura une contrainte chacun sur UserEntity identifiant. Fondamentalement, se rapprocher de ce que vous avez demandé à l'origine.