私は@OneToOne
注釈で接続されている2つのエンティティを持っています。よりよく理解するためにまず私のクラス:エントリを作成するが、@OneToOneにFKを設定しないHibernate
第二エンティティ:
@Table(name = "REASON_FOR_CLIENT_CHEQUE_PAYMENT_REVERSAL")
@Entity
public class ReversalReason implements Serializable{
/**
*
*/
private static final long serialVersionUID = 3338809410372872259L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer code;
private boolean tax;
private boolean currency;
private boolean amountChange;
private boolean locationChange;
private boolean recipient;
private boolean period;
public ReversalReason() {
}
}
基本エンティティ:
@Table(name = "CLIENT_CHEQUE_PAYMENT")
@Entity
public class ClientChequePayment extends BaseDomainObject implements Serializable {
/** Serial version UID */
private static final long serialVersionUID = -1988633355L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer code;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "code", nullable = true)
private ReversalReason reasonForReversal;
@Column(nullable = true, length = 50)
private String proposeReversalUser;
@Column(length = 50, unique = true)
private String displayCode;
@Column(length = 50)
private String originalEntry;
private PaymentStatus originalPaymentStatus;
そうでない場合は、コードがあまりにも多くなりますので、私はいくつかのフィールドをOMMITんでした。
私のプログラムではのフィールドをClientChequePayment
に設定して、session.update(clientChequePayment);
に設定したいと考えています。私はフィールドがupdate
を呼び出す前に設定されていたかどうかを確認しました。問題は、休止状態でReversalReason
のエントリが作成されますが、ReversalReason
のPKがClientChequePayment
エントリのFKとして設定されていないことです。そのため、私はを1 ClientChequePayment
に登録することができます。
私のマッピングは正しいですか?経由でClientChequePayment
にアクセスする必要はありませんが、その逆もあります。マッピングは双方向でなければならないのですか?
私は、「CLIENT_CHEQUE_PAYMENTは」「コード」という名前の列を持っていると仮定していることは正しいでしょうか? –
@MárioFernandesそうです。列の名前を変更する必要がありますか、または別の回避策がありますか? – XtremeBaumer
これはやや奇妙です。両方のテーブルの主キーが同じ(両方とも 'code')ですか?それはコードが言っていることなので。そうでなければ、外部キーが完全に失われています –