私は2つのテーブルを持っています。私はそれらの間に関係を作りたいのですが、それは子テーブルが親ノードの属性に接続することです。これはPKではありません。テーブルのFKとして非PKフィールドをどのように割り当てることができますか? ここに表があります。ユーザー情報:外部フィールドとしての通常のフィールド
@Entity
@Table(name="user")
public class userinformation implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="USER_ID")
private int uID;
@Column(name="LIB_ID")
private String libID;
//Other attributes
}
Libの情報
@Entity
@Table(name="libinfo")
public class Auth {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="AUTH_ID")
private int authID;
@Column(name="LIB_ID")
private String lib_ID;
//Other attributes
}
彼らの両方がlibID
(確かにユニーク)を介してリンクされなければなりません。それを正しく実装する方法は?
class User {
@Column(name = "lib_id")
private String libID;
}
をあなたのようにAuth
エンティティをマップする必要があります:基本的には、referencedColumnName
は、それが主キー列以外の列を使用する必要がありますJPAプロバイダを通知するために使用される
class Auth {
@JoinColumn(name = "lib_id", referencedColumnName = "lib_id")
@ManyToOne
private User user;
}
考える
O-O技法を使用し、任意のStringではなくオブジェクト参照を配置することによって、「正しく」実装します。次に参照整合性が得られます。標準のJPAでは、あなたが求めていることはできません。 –
@NeilStocktonしかし、私は単純に 'private userinformation lib_ID'と宣言すれば、' userinformation'クラスの 'libID'にリンクすることをどうすればいいのですか? – nlimits
まず、UserInformationフィールド" lib_ID "を呼ぶことはありません。それはUserInformation OBJECTです。次に、フィールドオブジェクトを割り当て、それを永続化する場所にコードを投稿します。 AuthクラスはUserInformationにFK列を持つテーブルを持っています –