0

RESTFul Web サービスの作成中に、NetBeans 7.4 によって生成された Entity クラス コードがあります。Web サービスをテストすると、以下の例外が発生します

 The target entity of the relationship attribute [emps] on the class 
 [class test.Dept] cannot be determined.  When not using generics, ensure 
 the target entity is defined on the relationship mapping.

従業員エンティティ

@Entity
@Table(name="EMP"
    ,schema="SCOTT"
)@XmlRootElement

public class Emp  implements java.io.Serializable {

@ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="DEPTNO")
    public Dept getDept() {
        return this.dept;
    }

部門エンティティ

@Entity
@Table(name="DEPT"
    ,schema="SCOTT"
)@XmlRootElement

public class Dept  implements java.io.Serializable {

@OneToMany(fetch=FetchType.LAZY, mappedBy="dept")
    public Set getEmps() {
        return this.emps;
    }

hibernate.reveng

<?xml version="1.0" encoding="UTF-8"?>    
<hibernate-reverse-engineering>
  <schema-selection match-schema="SCOTT"/>
  <table-filter match-name="EMP"/>
  <table-filter match-name="DEPT"/>
</hibernate-reverse-engineering>

hibernate.cfg

 <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
    <property 
    name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
    <mapping class="test.Emp"/>
    <mapping class="test.Dept"/>
  </session-factory>
4

1 に答える 1

1

リレーションシップは、ターゲット エンティティを決定するのempsに十分な情報を提供しません。この情報を提供するには、2 つの簡単な方法があります。

A) ジェネリック

ジェネリックを使用するか(リファクタリングを意味する場合があります):

@OneToMany(fetch=FetchType.LAZY, mappedBy="dept")
public Set<Emp> getEmps() {
    return this.emps;
}

B) @Target アノテーション

または@Target注釈を使用する(エラーメッセージで説明されているように):

@OneToMany(fetch=FetchType.LAZY, mappedBy="dept")
@Target(Emp.class)
public Set getEmps() {
    return this.emps;
}

C) targetEntity 属性

@OneToMany(fetch=FetchType.LAZY, mappedBy="dept", targetEntity=Emp.class)
public Set getEmps() {
    return this.emps;
}
于 2013-11-15T08:24:47.190 に答える