sql >> Databáze >  >> RDS >> Mysql

Snažím se vytvořit dvě různé tabulky manytoone mapování v jednom sloupci pro jednu třídu entity

Myslím, že to, co hledáte, je vysvětleno v Hibernace sekce ORM o @Any anotace :

@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

Ale nevytvoří žádné cizí klíče. Dokonce si nemyslím, že je možné vytvořit dva cizí klíče ve stejném sloupci pro různé tabulky (má to vůbec smysl?

Případně, pokud by se dvě třídy mohly rozšířit ze společné supertřídy, můžete použít Mapování dědičnosti dosáhnout něčeho podobného.

Například:

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

a poté

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

Tím však vytvoříte tři tabulky. Tabulka UserEntity bude mít cizí klíč na assignedto_id sloupec. User id a LDAPUser id bude mít každé omezení na UserEntity id. V podstatě se přiblížíte tomu, na co jste se původně ptali.




  1. PHP PDO vrací nekonzistentní výsledky pro SELECT FOUND_ROWS()

  2. Sledování možností kurzoru

  3. MySQL Druhý (nebo třetí) index v řetězci

  4. Převést unixový čas na UTC datetime