sql >> データベース >  >> RDS >> Mysql

1つのエンティティクラスの1つの列に2つの異なるテーブルmanytooneマッピングを作成しようとしています

    あなたが探しているものは、 @Anyに関するHibernateORMセクション 注釈

    @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
    

    ただし、外部キーは作成されません。異なるテーブルの同じ列に2つの外部キーを作成することは不可能だと思います(意味がありますか?)。

    または、2つのクラスが共通のスーパークラスから拡張できる場合は、継承マッピング 同様のことを達成するために。

    例:

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

    そして

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

    ただし、これにより3つのテーブルが作成されます。テーブルUserEntity assignedto_idに外部キーがあります 桁。 User idとLDAPUser idには、UserEntityごとに制約があります id。基本的に、最初に尋ねたものに近づきます。




    1. SQLServer本番DBAに関する5つの便利なヒント

    2. SQLで重複行を削除する

    3. ORA-03135 –RMANが重複しています

    4. Oracleのネストされたテーブルの主キーと外部キー