8

我无法弄清楚问题是什么,请帮助。我搜索了很多,但没有找到任何有用的建议。也许你可以帮助我。非常感谢。

有两个类使用 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>
4

1 回答 1

15

Javadoc中所述

如果集合使用泛型定义来指定元素类型,则不需要指定关联的目标实体类型;否则必须指定目标实体类。

所以,你可以做

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

或者

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

但我更喜欢第一个。

于 2012-09-18T23:53:58.193 回答