Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The target entity of the relationship attribute cannot be determined

I can't figure out what the problem is, please help. I've searched a lot, but didn't find any useful advice. Maybe you can help me. Thanks a lot.

There are two classes using eclipselink as jpa provider:

@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;
    }
}

and

@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;
    }

}

When I'm trying to compile this, I receive error:

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.

Here is my persistence.xml file:

<?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>
like image 245
braveleg Avatar asked Sep 18 '12 23:09

braveleg


People also ask

What is target entity?

Related Definitions Target Entity means any limited liability company, corporation, limited liability partnership or any equivalent.

What is target entity JPA?

targetEntity is the entity class that is the target of the association (relationship). If the collection-valued relationship property is defined using Java generics. Must be specified otherwise. cascade is the operations that must be cascaded to the target of the association.

What is targetEntity in hibernate?

The mapping for a field in another entity which associates Nationality entity was mapped incorrectly by somebody, specifying it's target entity as Country. This is shown below: @ManyToOne(targetEntity = Country.class, fetch = FetchType.LAZY, optional = false)


1 Answers

As stated in the 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.

So, you can do either

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

or

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

But I would prefer the first.

like image 182
fvu Avatar answered Oct 01 '22 08:10

fvu