0

休止状態の 1 対 1 マッピングで問題に直面しています。たくさんググったが解決できなかった。

データベースはこちら

以下は私のモデルクラスです。

パブリック クラス ユーザー {

private int userId;
private String userName;
private Address address;

public Address getAddress() {
    return address;
}
public void setAddress(Address address) {
    this.address = address;
}
public int getUserId() {
    return userId;
}
public void setUserId(int userId) {
    this.userId = userId;
}

public String getUserName() {
    return userName;
}
public void setUserName(String userName) {
    this.userName = userName;
}

}

パブリック クラス アドレス {

private int addrId;
private String addr;

public int getAddrId() {
    return addrId;
}
public void setAddrId(int addrId) {
    this.addrId = addrId;
}
public String getAddr() {
    return addr;
}
public void setAddr(String addr) {
    this.addr = addr;
}

}

user.hbm.xmlは次のとおりです。

<class name="User" table="users" schema="dbo" catalog="test">
      <id name="userId" type="int" column="userId" >
        <generator class="assigned"/>
      </id>
  
      <property name="userName">
         <column name="userName" />
      </property>
      
      <one-to-one name="address" property-ref="addrId"  class="Address" cascade="all" />

  </class>

address.hbm.xml は次のとおりです。

<class name="ammar.Address" table="Address" schema="dbo" catalog="test">

      <id name="addrId" type="int" column="AddrID" >
        <generator class="assigned"/>
      </id>
  
      <property name="addr">
         <column name="Addr" />
      </property>

  </class>

実行時に、次の例外が発生します。

スレッド「メイン」org.hibernate.HibernateException での例外: プロパティを解決できません: addrId

マッピングなしで正常に実行されます。ただし、マッピングが適用されるとレコードを取得できません。

休止状態によって出力されたクエリは、DB で完全に正常に実行されます。

4

2 に答える 2

2

user.hbm.xml では、プロパティ参照がアドレスをユーザーに接続する方法について話しているためであり、その逆ではなく、混乱を招くためですproperty-ref="addrId"property-ref="userId"おそらく property-ref を省略することができます。これがないと、Address は主キーを指す外部キーを介して User を見つけるからです。ドキュメントには、「指定されていない場合、関連付けられたクラスの主キーが使用されます」と記載されています (セクション 5.1.13) 。

于 2012-04-09T17:57:41.803 に答える
0

私はそれが価値観で働いているとは思わないint...私は彼らがしなければならないことだと思うInteger...

あなたはこのように変えることができますか?:

private int addrId;

の中へ

private Integer addrId;

など、すべてのint変数について...

于 2012-04-09T16:06:55.430 に答える