2012-09-18 32 views
7

我找不出問題所在,請幫助。我搜索了很多,但沒有找到任何有用的建議。也許你可以幫助我。非常感謝。關係屬性的目標實體無法確定

有使用的EclipseLink作爲JPA提供兩類:

@Entity 
@Table(name = "USER") 
public class User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE) 
    private Long id; 

    private String login; 

    private Long groupId; 

    private String email; 

    @ManyToMany(mappedBy = "users") 
    private List polls; 

    @OneToMany(mappedBy = "user") 
    private List votes; 

    public List getVotes() { 
     return votes; 
    } 

    public void setVotes(List votes) { 
     this.votes = votes; 
    } 

    public User() { 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getLogin() { 
     return login; 
    } 

    public void setLogin(String login) { 
     this.login = login; 
    } 

    public Long getGroupId() { 
     return groupId; 
    } 

    public void setGroupId(Long groupId) { 
     this.groupId = groupId; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public List getPolls() { 
     return polls; 
    } 

    public void setPolls(List polls) { 
     this.polls = polls; 
    } 
} 

@Entity 
@Table(name = "VOTE") 
public class Vote { 

    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE) 
    private Long vid; 

    private String comment; 

    @ManyToOne 
    private User user; 

    @ManyToOne 
    private Option option; 

    public Vote() { 
    } 

    public Long getVid() { 
     return vid; 
    } 

    public void setVid(Long vid) { 
     this.vid = vid; 
    } 

    @Column(name = "comment") 
    public String getComment() { 
     return comment; 
    } 

    public void setComment(String comment) { 
     this.comment = comment; 
    } 

    public User getUser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 

    public Option getOption() { 
     return option; 
    } 

    public void setOption(Option option) { 
     this.option = option; 
    } 

} 

當我嘗試編譯此,我收到錯誤:

Exception [EclipseLink-7214] (Eclipse Persistence Services - 2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.ValidationException 
Exception Description: The target entity of the relationship attribute [votes] on the class [class logic.User] cannot be determined. When not using generics, ensure the target entity is defined on the relationship mapping. 

這裏是我的persistence.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" 
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
    <persistence-unit name="pollsPU" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>   
     <class>logic.Option</class> 
     <class>logic.Poll</class> 
     <class>logic.User</class> 
     <class>logic.Vote</class>  
     <class>logic.Greeting</class>  
     <properties> 
      <property name="eclipselink.jdbc.password" value="" /> 
      <property name="eclipselink.jdbc.user" value="" /> 
      <property name="eclipselink.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
      <property name="eclipselink.jdbc.url" 
       value="jdbc:mysql://localhost:3306/core_polls" /> 
      <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> 
      <property name="eclipselink.logging.level" value="INFO" /> 
      <property name="eclipselink.ddl-generation.output-mode" 
       value="database" /> 
     </properties> 
    </persistence-unit> 
</persistence> 
+0

如果多對一一直與一對多混淆,這也可能發生(不適用於您的情況,但對於從搜索引擎到達此處的用戶有用)。 –

回答

12

正如Javadoc

If the collection is defined using generics to specify the element type, the associated target entity type need not be specified; otherwise the target entity class must be specified.

所以說,你可以做任何

@OneToMany(mappedBy = "user") 
private List<Vote> votes; 

@OneToMany(targetEntity=logic.Vote.class, mappedBy = "user") 
private List votes; 

不過我更傾向於第一個。

相關問題