Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

estou tentando fazer duas tabelas diferentes mapeamento manytoone em uma única coluna para uma classe de entidade


Acho que o que você está procurando está explicado no Seção Hibernate ORM sobre @Any anotação :
@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

Mas não criará nenhuma chave estrangeira. Eu nem acho que seja possível criar duas chaves estrangeiras na mesma coluna para tabelas diferentes (isso faz sentido?).

Como alternativa, se as duas classes puderem se estender de uma superclasse comum, você poderá usar Mapeamento de herança para conseguir algo semelhante.

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

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

Isso criará três tabelas. A tabela UserEntity terá uma chave estrangeira no assignedto_id coluna. User id e LDAPUser id terá uma restrição em cada UserEntity Eu iria. Basicamente, chegando perto do que você pediu originalmente.