0

個人情報、グループ指定、グループ設計図カテゴリという 3 つのテーブルがありました。

  • personalinfo:pid(個人ID)
  • groups_designation:gid(グループID)
  • groups_desig_category:gid,pid

実際、私は両方のテーブル (personalinfo、groups_designation) にデータを持っています。そのため、1 つの画面を提供しています。その中で、ユーザーはグループを選択し、個人 ID を割り当て、データは groups_desig_category テーブルに取り込まれます。このシナリオでは、次のようにマッピングされます。

Personal.hbm.xml:-

<set name="empwthgrp" inverse="true" lazy="true"  table="groups_desig_category">
 <key>
    <column name="pid" not-null="true" />
  </key>

            <many-to-many entity-name="com.aims.beans.DesignationGroupBean">
                <column name="gid" not-null="true" />
            </many-to-many>

</set>

Personal.java:-

/**
 * 
 */
private static final long serialVersionUID = 1L;
private int pid,deptno;
private String name,designation;
private Address address;
private Address permentaddress;
private Set famildtlslst;
private Set empwthgrp=new HashSet();
public Set getEmpwthgrp() {
    return empwthgrp;
}
public void setEmpwthgrp(Set empwthgrp) {
    this.empwthgrp = empwthgrp;
}
public Set getFamildtlslst() {
    return famildtlslst;
}
public void setFamildtlslst(Set famildtlslst) {
    this.famildtlslst = famildtlslst;
}
public Address getPermentaddress() {

    return permentaddress;
}
public void setPermentaddress(Address permentaddress) {

    this.permentaddress = permentaddress;
}
public Address getAddress() {

    return address;
}
public void setAddress(Address address) {
    this.address = address;
}
public int getDeptno() {
    return deptno;
}
public void setDeptno(int deptno) {
    this.deptno = deptno;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getPid() {
    return pid;
}
public void setPid(int pid) {
    this.pid = pid;
}
public String getDesignation() {
    return designation;
}
public void setDesignation(String designation) {
    this.designation = designation;
}

GroupingDesig.hbm.xml:-

<class name="beans.DesignationGroupBean" table="groups_designation" proxy=beans.DesignationGroupBean">

<id name="gid" column="gid" type="java.lang.Integer">
 <generator class="sequence"><param name="sequence">gid_seq</param> </generator>
</id>
<property name="gname"  type="java.lang.String" column="gname" not-null="true" />
<property name="description"  type="java.lang.String" column="description" not-null="true" />
<set name="grpwthemp" inverse="true" lazy="true" table="groups_desig_category">
 <key>
    <column name="gid" not-null="true" />
  </key>
             <many-to-many entity-name="com.aims.beans.Personal">
                <column name="pid" not-null="true" />
            </many-to-many>
</set>
</class>

DesignationGroupBean.java:-

private int gid;
private String gname,description;
private Set grpwthemp=new HashSet();
public Set getGrpwthemp() {
    return grpwthemp;
}
public void setGrpwthemp(Set grpwthemp) {
    this.grpwthemp = grpwthemp;
}
public String getDescription() {
    return description;
}
public void setDescription(String description) {
    this.description = description;
}
public int getGid() {
    return gid;
}
public void setGid(int gid) {
    this.gid = gid;
}
public String getGname() {
    return gname;
}
public void setGname(String gname) {
    this.gname = gname;
}

実際に私は session.saveOrUpdate(pBean) を試しています。しかし、うまくいきません。多対多の関係ではなく、1 対多および多対 1 に変更できる可能性があります。このシナリオには適していないと思います。このシナリオでどのように処理しますか?.リバース エンジニアリングを使用すると、1 対多および多対 1 の関係として作成されますか? なぜ?.助けてください。

アップデート:-

私は1対多および多対1の関係の休止状態で実装されていますが、データベースでは多対多の関係です。その後、正常に動作し、以下に1対多の関係で休止状態のマッピングファイルを貼り付けました

GroupingDesig.hbm.xml:-

<set name="grpwthemp" inverse="true" lazy="true" table="groups_desig_category">
 <key>
    <column name="gid" not-null="true" />
  </key>
                <one-to-many class="com.aims.beans.GroupAssignment"/>


           <!--  <many-to-many entity-name="com.aims.beans.Personal">
                <column name="pid" not-null="true" />
            </many-to-many>-->

</set>

Personal.hbm.xml

<set name="empwthgrp" inverse="true" lazy="true"  table="groups_desig_category">
 <key>
    <column name="pid" not-null="true" />
  </key>
    <one-to-many class="com.aims.beans.GroupAssignment"/>

            <!--
            <many-to-many entity-name="com.aims.beans.DesignationGroupBean">
                <column name="gid" not-null="true" />
            </many-to-many>-->

</set>

AssigGroupingDesig.hbm.xml:-

<many-to-one name="personal" column="pid" class="com.aims.beans.Personal" not-null="true"></many-to-one>
<many-to-one name="desigdt" column="gid" class="com.aims.beans.DesignationGroupBean" not-null="true"></many-to-one>

いつリレーションシップの画像が表示されるのでしょうか?.Web で多対多リレーションの例を検索しました。

Mykong 多対多

私を助けてください。私の質問は、多対多のリレーションシップがリアルタイムでいつ使用されるかです。

更新 2:-

ありがとうございます。逆タグを削除すると正常に動作します。しかし、クエリの削除の生成について疑問があります。ログを確認してください

 /* load com.beans.Personal */ select personal0_.pid as pid0_, personal0_.name as name5_0_, personal0_.DEPTNO as DEPTNO5_0_, personal0_.designation as designat4_5_0_, personal0_.pddress1 as pddress5_5_0_, personal0_.pddress2 as pddress6_5_0_, personal0_.pcity as pcity5_0_, personal0_.pstate as pstate5_0_, personal0_1_.HomeAddress1 as HomeAddr2_7_0_, personal0_1_.HomeAddress2 as HomeAddr3_7_0_, personal0_1_.homecity as homecity7_0_, personal0_1_.homestate as homestate7_0_ from personalinfo personal0_, address personal0_1_ where personal0_.pid=personal0_1_.pid and personal0_.pid=?



delete collection com.beans.Personal.empwthgrp */ delete from groups_desig_category where pid=?




insert collection row com.beans.Personal.empwthgrp */ insert into groups_desig_category (pid, gid) values (?, ?)

なぜ「pid = の groups_desig_category から削除しますか?」を生成するのはなぜですか?Plz help me

更新 3:-

はい。session.get を使用してデータをロードしています。必須フィールドの一部に関して例外が発生したためです。これが、データをロードしてからレコードを更新する理由です。

          per=(Personal)session.get(Personal.class,new Integer(pBean.getPid()));
    per.setEmpwthgrp(pBean.getEmpwthgrp());
    session.saveOrUpdate(per);
4

1 に答える 1

1

多対多マッピングでは、両方inverseに設定します。関連付けを所有するエンティティを 1 つ選択する必要があります。そのエンティティについては、マッピングでinverse="true"設定を削除します。これは、保存または更新されると、個人とグループの関係を保持するエンティティになります。

あなたの質問では を投稿しましたが、エンティティであるsaveOrUpdate(pBean)と想定しているため、 の設定を削除する必要があります。pBeanPersonalinverse="true"Personal.hbm.xml

参照ドキュメントの詳細: http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-bidirectional-join-m2m

于 2012-07-20T06:11:07.620 に答える