« Return to Thread: Entity relationship issue

Re: Entity relationship issue

by christopher delahunt :: Rate this Message:

Reply to Author | View in Thread

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
>
>  
_______________________________________________
eclipselink-users mailing list
eclipselink-users@...
https://dev.eclipse.org/mailman/listinfo/eclipselink-users

 « Return to Thread: Entity relationship issue