1

emp_id として主キーを持つ 2 つのテーブルがあります。私はSpring、Hibernate、MVCを使用しています。

ドメイン ファイル:

public class Employee_Domain {

private static final long serialVersionUID = 1L;

private Integer emp_id;
private String domain_name;

@OneToOne @PrimaryKeyJoinColumn
private Employee empDomObj;
    @Id
@Column(name = "EMP_ID", unique = true, nullable = false)
public Integer getEmp_id() {
    return emp_id;
}

public void setEmp_id(Integer emp_id) {
    this.emp_id = emp_id;
}

@Column(name = "DOMAIN_NAME", unique = false, nullable = true, length = 200)
public String getDomain_name() {
    return domain_name;
}

public void setDomain_name(String domain_name) {
    this.domain_name = domain_name;
}
     }

public class Employee implements java.io.Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;

private Integer emp_id;
private String emp_name;
private String emp_role;

@OneToOne @PrimaryKeyJoinColumn
private Employee_Domain empDomObj;


@Id
@Column(name = "EMP_ID", unique = true, nullable = false)
public Integer getEmp_id() {
    return emp_id;
}

public void setEmp_id(Integer emp_id) {
    this.emp_id = emp_id;
}

@Column(name = "EMP_NAME", unique = false, nullable = false, length = 500)
public String getEmp_name() {
    return emp_name;
}

public void setEmp_name(String emp_name) {
    this.emp_name = emp_name;
}

@Column(name = "ROLE", unique = false, nullable = false, length = 100)
public String getEmp_role() {
    return emp_role;
}

public void setEmp_role(String emp_role) {
    this.emp_role = emp_role;
}

私の domainDao 実装は次のようなものです:

@Override
public List<Employee_Domain> findEmployeeByDomain1(String domain_name) {
    Criteria criteria = getSession().createCriteria(Employee_Domain.class);
    criteria.setFetchMode("EMP_DETAILS", FetchMode.JOIN);
    criteria.add(Restrictions.eq("domain_name", domain_name));
    return criteria.list();
}

そしてMVC imを使用してこの関数を呼び出し、オブジェクトをjspに渡して印刷します。

これを実行すると、単純な SQL クエリが得られます。

select this_.EMP_ID as EMP1_3_0_, this_.DOMAIN_NAME as DOMAIN2_3_0_ from EMPLOYEE_DOMAIN_MAPPING this_ where this_.DOMAIN_NAME=?

結合が発生しないのはなぜですか?私は何が欠けていますか?私はこれに慣れていないので、私を叩かないでください。同様の例をたくさん検索してみましたが、見つかりませんでした。

4

1 に答える 1

0

関係が1対多の場合、テーブルは結合されます。

ドメイン ファイルでは、 Employee_DomainEmployeeの関係は1 対 1です。

次のように変更してみてください。

@OneToMany(mappedBy="Employee_Domain")
private List<Employee> employees= new ArrayList<Employee>();

そして結合が起こります。

于 2013-10-05T10:13:51.720 に答える