2017-03-19 13 views
0

私はヌルにすることはできませんネストされたオブジェクトのユーザーとオブジェクトカーを持っています。Hibernateで複数のエンティティFKを単一の属性に保存するには?

class Car { 
    @Id 
    int id; 
    @NotNull 
    User user; 
} 

しかし私はVehicleもまた、会社の所有権を持つようにアップグレードしたいと考えています。同時に所有することはできません。 Hibernateに、UserとCompanyとして使用できるFKをCarに含めるオプションがありますか?次に例を示します。

class Car { 
    @Id 
    int id; 
    @NotNull 
    Owner owner; //Can be object type User or Comapny 
} 

私は巣のユーザーと会社へのオプションを持つことになり、余分なオブジェクトのUserRoleを作るためのアイデアを持っているが、私はそれが可能であるならば、余分な物を必要としないより良いソリューション/最適化を探していますHibernateで:

class Car { 
    @Id 
    int id; 
    @NotNull 
    UserRole owner; //Can be object type User or Comapny 
} 
class UserRole{ 
    @Id 
    int id; // PK, that will be used in Car 
    User user; 
    Company company; 
    int type; // determinates what if owner is User or Company 
} 

実装は、APIのエンティティを格納するために使用されます。 簡単な方法があることをお勧めします。ありがとう。

答えて

0

あなたはそれらの両方を使用することができます。

class Car { 
    @Id 
    int id; 
    @NotNull 
    User user; 
    @NotNull 
    Company company; 
} 

そして、あなたは車の所有者を取得する必要があるときだけnullためuser財産とcompanyプロパティをチェック。

1

まず、Userはヌル可能ではないと言っています。次にCarUserCompanyの両方で同時に所有することはできないと言います。つまり、Userはヌル可能です。

CompanyUserの両方に同じフィールドを使用することはできません。 Hibernateでは、各クラスは単一のエンティティに関連付けられています。だから、私の提案は@NotNull注釈なし

class Car { 
    @Id 
    int id; 

    @ManyToOne 
    User user; 

    @ManyToOne 
    Company company; 
} 

を行うことです、その後、ちょうどnullの場合かチェック。

第2のオプションは、(可能であれば)継承を使用することです。 と呼ばれる@MappedSuperClassを作成し、UserOwnerを継承させることができます。車内にCarHolderという1つのフィールドだけを入れることができます。

関連する問題