2つのテーブルの間に1対1の関係を作成しようとしています。それらのハイバネートと1対1の関係
一つは、人である:
public class Person implements Serializable {
static final long serialVersionUID = 1L;
private long id;
private String _email;
private String _pass;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getEmail() {
return _email;
}
public void set_email(String _email) {
this._email = _email;
}
public String getPass() {
return _pass;
}
public void set_pass(String _pass) {
this._pass = _pass;
}
}
、2番目はReqC2dmRegIdテーブルです:
public class ReqC2dmRegId implements Serializable {
private static final long serialVersionUID = 1L;
Person person;
String C2dmid;
private long id;
public ReqC2dmRegId(){}
public String getC2dmid() {
return C2dmid;
}
public void setC2dmid(String c2dmid) {
C2dmid = c2dmid;
}
public ReqC2dmRegId(Person person, String C2dmid) {
super();
this.person = person;
this.C2dmid = C2dmid;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
さて、私のプログラムでは、私はいつもPerson
最初とを作成するだけで、私は追加必要なときこのReqC2dmRegId
。
ここでは、この2つのテーブルをリンクすることを試みます。私はこれを維持するとき、私はReqC2dmRegId
(もちろん、私はReqC2dmRegId
の人に右のIDを追加する)私は自分のReqC2dmRegId
をに更新するか、Person
というidを持つ新しい行をに保存したいと思います。私は間違って何をやっている
ReqC2dmRegId.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Mar 26, 2012 11:29:57 AM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="c2dm.ReqC2dmRegId" table="REQC2DMREGID">
<id name="id" type="long">
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<one-to-one name="person" class="Entities.Person" cascade="all" />
<property name="C2dmid" type="java.lang.String">
<column name="C2DMID" />
</property>
</class>
</hibernate-mapping>
Person.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Mar 26, 2012 11:29:57 AM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="Entities.Person" table="PERSON">
<id name="id" type="long">
<column name="ID" />
<generator class="increment" />
</id>
<property name="_email" type="java.lang.String" access="field">
<column name="_EMAIL" />
</property>
<property name="_pass" type="java.lang.String" access="field">
<column name="_PASS" />
</property>
</class>
</hibernate-mapping>
:
これらは私のHBMファイルですか?
私が実行しようとすると:
//this should to update or save the object in DB
public void update (Object query){
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
//em.createNativeQuery(query).executeUpdate();
em.merge(query);
em.flush();
em.getTransaction().commit();
em.close();
}
を私が手:最後に
attempted to assign id from null one-to-one property:Person
を、それは次のようになります。
を人
**id email _pass**
2 [email protected] 1234
ReqC2dmRegId
**id REQC2DMREGID**
2 ffgghhjj
更新: 私はこのように見えるように私は私のReqC2dmRegId.hbm.xml を変更することが
を働いていない方法を理解しようとあきらめた後(多対1):
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated Mar 27, 2012 9:58:08 PM by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping>
<class name="c2dm.ReqC2dmRegId" table="REQC2DMREGID">
<id name="id" type="long">
<column name="ID" />
<generator class="identity" />
</id>
<many-to-one name="person" class="Entities.Person" fetch="join" unique="true" cascade="save-update" not-null="true" >
<column name="PERSON" />
</many-to-one>
<property name="C2dmid" type="java.lang.String">
<column name="C2DMID" />
</property>
</class> </hibernate-mapping>
と、この問題は、私は私の更新方法でReqC2dmRegIdテーブル を変更しようとすると、それが今と同じPERSONID
で行作成で正常に動作しています私は "多くの1つの"プロパティを一意にすることができますが、 "正しい"行をinstated正しい行を更新しません= "true"?
あなたは関係の種類について明確にする必要があり、事前
は、なぜあなたは代わりにXMLファイルの注釈を使用していけませんか?注釈が簡単で直感的に見つかる – suenda
最初はxmlが何らかの理由で私にとってもっと簡単であることがわかった。そして私はそれらと仕事を始め、今ではすべてのオブジェクトを変更するのは難しい。 – user986474