0

org.hibernate.PropertyValueException: not-null プロパティが null または一時的な値を参照しています: com.master.model.AccountLoan.account の問題に直面しています。Account と AccountLoan の 2 つのテーブルがあり、以下は Account のテーブル構造です。

アカウント -

    create table ACCOUNT
    (
      ac_id               INTEGER not null,
      ac_name               VARCHAR2(40) not null,
      ac_islocked           CHAR(1) not null
    )

以下は、アカウントローンのテーブル構造です

アカウントローン--

    create table ACCOUNT_LOAN
    (
      al_id            INTEGER not null,
      al_ac_id         INTEGER not null,
      al_loanA   NUMBER(15,2),
      al_loanB   NUMBER(15,2)
      )   

両方のテーブル データは、単一の追加ボタン クリックで単一の jsp から取得されます。追加機能は正常に動作しています。アカウント ローンはオプションです。ユーザーが LoanA および LoanB フィールドに入力しない場合、アカウント ローンにレコードはありません。ユーザーが LoanA および LoanB フィールドに入力すると、アカウント ローン テーブルにレコードが挿入されます。

標的

アカウント ローンのないアカウント レコードを更新したい。次の例外がスローされるアカウント レコードを更新すると、org.hibernate.PropertyValueException: not-null プロパティが null または一時的な値を参照する: com.master.model.AccountLoan.account.

以下は両方のモデルのJavaファイルです。

import java.math.BigDecimal;

public class Account extends BaseM
{   
    private String name;            
    private Boolean isLocked;
    private AccountLoan accountLoan;

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
      this.name = name;
    }

    public Boolean getIsLocked()
    {
        return isLocked;
    }

    public void setIsLocked(Boolean isLocked)
    {
        this.isLocked = isLocked;
    }

    public AccountLoan getAccountLoan()
    {
        return accountLoan;
    }

    public void setAccountLoan(AccountLoan accountLoan)
    {
        this.accountLoan = accountLoan;
    }

}

Account Loan model java file

import java.math.BigDecimal;

public class AccountLoan extends BaseM
{
    private BigDecimal loanA;   
    private BigDecimal loanB;   
         private Account account;

    public BigDecimal getloanA()
    {
        return loanA;
    }


    public void setloanA(BigDecimal loanA)
    {
        this.loanA= loanA;
    }


    public BigDecimal getloanB()
    {
        return loanB;
    }


    public void setLoanInterest(BigDecimal loanB)
    {
        this.loanB= loanB;
    }

         public Account getAccount()
    {
        return account;
    }
    public void setAccount(Account account)
    {
        this.account = account;
    }

}


Account.hbm.xml

<hibernate-mapping>
    <class name="com.master.model.Account" table="ACCOUNT" dynamic-update="true">
        <id name="id" column="AC_ID" type="long">
            <generator class="com.common.support.IdGenerator">
                <param name="sequence">ACID_SEQ</param>
            </generator>
        </id>                    
       <one-to-one name="accountLoan" class="com.master.model.AccountLoan" cascade="all"/>       

      <property name="name" column="AC_NAME" type="string" />       
      <property name="isLocked" column="AC_ISLOCKED" type="yes_no" />
</class>
</hibernate-mapping>

AccountLoan.hbm.xml

<hibernate-mapping>

    <class name="com.master.model.AccountLoan" table="ACCOUNT_LOAN" dynamic-update="true">
        <id name="id" column="AL_ID" type="long">
            <generator class="com.common.support.IdGenerator">
                <param name="sequence">ALID_SEQ</param>
            </generator>
        </id>

       <many-to-one name="account" class="com.master.model.Account" unique="true">
           <column name="AL_AC_ID" not-null="true" />
       </many-to-one>    

       <property name="loanA" column="AL_LOANA" type="big_decimal" /> 
       <property name="loanB" column="AL_LOANB" type="big_decimal" />

    </class>
</hibernate-mapping>
4

1 に答える 1

0

まず、ドキュメントに記載されているようにマッピングを作成します。1 対 1 には、property-ref 属性が必要です。

AccountLoan.account次に、 AccountLoan を Account にアタッチする場合は、必ずプロパティを初期化してください。フィールドを初期化するAccount.accountLoanだけでは不十分です。

于 2012-06-30T07:40:40.940 に答える