2012-09-18 36 views
7

Tôi không thể tìm ra vấn đề là gì, vui lòng trợ giúp. Tôi đã tìm kiếm rất nhiều, nhưng không tìm thấy bất kỳ lời khuyên hữu ích nào. Có lẽ bạn có thể giúp tôi. Cảm ơn rất nhiều.Mục tiêu của thuộc tính mối quan hệ không thể được xác định

Có hai lớp sử dụng EclipseLink là nhà cung cấp 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; 
    } 

} 

Khi tôi đang cố gắng để biên dịch này, tôi nhận được lỗi:

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. 

đây là tệp persistence.xml của tôi:

<?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

Điều này cũng có thể xảy ra (không phải trong trường hợp của bạn, nhưng hữu ích cho những người đến đây từ một công cụ tìm kiếm) nếu nhiều người bị nhầm lẫn với một-nhiều. –

Trả lời

12

Như đã nêu trong 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.

Vì vậy, bạn có thể làm một trong hai

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

hoặc

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

Nhưng tôi muốn là người đầu tiên.

Các vấn đề liên quan