Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] Entity relationship issue

Hello,

There have been a number of Responses so far, but I wanted to point out you have annotations on both fields and properties which is not allowed. Putting the @OneToMany on the getMessages is likely causing it to be ignored - which is why it is using the
CPUSER_CP_MSG table, since it thinks this is a unidirectional 1:M relation.

Best Regards,
Chris


khaskett wrote:
I am having an issue with creating a relationship between 2 entities, where
the parent entity was created from a Stored Procedure. When I try to use the
@OneToMany annotation it tries to join the two entities.

@Entity
public class CpUser extends BaseDomain {

    // Attributes
    @Id
    @Column(name = "paramUserID")
    private String userId;

    @Column(name = "paramInitials")
    private String initials;

    @Column(name = "paramFirstName")
    private String firstName;

    @Column(name = "paramLastName")
    private String lastName;

     .....

    /*
     * List of user messages
     */
    private Set<CpMsg> messages = new HashSet<CpMsg>(0);

   .....
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy =
"userId")
    public Set<CpMsg> getMessages() {
        return messages;
    }
}  // End CpUser

@Entity
@Table(name = "CP_MSG")
public class CpMsg extends BaseDomain {

	// Fields
	@Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "MSG_ID", unique = true, nullable = false, precision = 11,
scale = 0)
	private Long msgId;
	@Column(name = "MSG_TEXT", nullable = false)
	private String msgText;

	private CpUser cpUser;
    ....
	public CpUser getCpUser() {
		return this.cpUser;
	}
} //End CpMsg

I removed some fields for brevity.
When I try and get the messages for that user by calling getMessages() I get
this in the logs -
Call: SELECT t1.MSG_ID, t1.MSG_TEXT, t1.USER_ID FROM CPUSER_CP_MSG t0,
CP_MSG t1 WHERE ((t0.CpUser_paramUserID = ?) AND (t1.MSG_ID =
t0.messages_MSG_ID))
	bind => [USER123]

And the error is that CPUSER_CP_MSG doesnt exist, which is correct.

I guess I assumed it would just do a select on the child table passing in
the value from the parent.

Thanks in advance



Back to the top