Note that there are some explanatory texts on larger screens.

plurals
  1. POorg.hibernate.PropertyAccessException: with many to many relation
    text
    copied!<p>I've encountered a problem while establishing new table (UserMessage) for many to many relation (User and Message tables). When I try to access a row from the mapping table I get an exception: <code>org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.package.model.User.userid</code></p> <p>UserMessage entity is necessary for further addition of properties to the relation table.</p> <p>Data is accessed via:</p> <pre><code> Session session = (Session) entityManager.getDelegate(); String hql = "FROM Message M, UserMessage UM WHERE M.messageid = UM.pk.message and UM.pk.user = :id"; Query query = session.createQuery(hql); query.setParameter("id", id); query.list(); </code></pre> <p>My classes:</p> <p><strong>User.java</strong></p> <pre><code>@Entity @Table(name = "USER") public class User { @Id @GeneratedValue(generator="system-uuid") @GenericGenerator(name="system-uuid", strategy = "uuid") @Column(nullable = false) private Long userid; @Column(unique = true, nullable = false) private String username; @OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.user", cascade = {CascadeType.PERSIST}) private Set&lt;UserMessage&gt; inbox = new HashSet&lt;UserMessage&gt;(); public User() { } public Long getUserid() { return userid; } public void setUserid(Long id) { this.userid = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Set&lt;UserMessage&gt; getInbox() { return inbox; } public void setInbox(Set&lt;UserMessage&gt; inbox) { this.inbox = inbox; } public void addMessageToUser(Message message){ UserMessage userMessage = new UserMessage(); userMessage.setUser(this); userMessage.setMessage(message); inbox.add(userMessage); } } </code></pre> <p><strong>Message.java</strong></p> <pre><code>@Entity @Table(name = "MESSAGE") public class Message { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long messageid; private String subject; private String body; @OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.message",cascade = {CascadeType.PERSIST}) private Set&lt;UserMessage&gt; toUser = new HashSet&lt;UserMessage&gt;(); public Set&lt;UserMessage&gt; getToUser() { return toUser; } public void setToUser(Set&lt;UserMessage&gt; toUser) { this.toUser = toUser; } public void addUserToMessage(User user){ UserMessage userMessage = new UserMessage(); userMessage.setUser(user); userMessage.setMessage(this); toUser.add(userMessage); } public Message() { } public Long getMessageid() { return messageid; } public void setMessageid(Long id) { this.messageid = id; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } } </code></pre> <p><strong>UserMessage.java</strong></p> <pre><code>@Entity @Table(name = "USER_MESSAGE") @AssociationOverrides({ @AssociationOverride(name = "pk.user", joinColumns = @JoinColumn(name = "userid")), @AssociationOverride(name = "pk.message", joinColumns = @JoinColumn(name = "messageid")) }) public class UserMessage{ @EmbeddedId private UserMessagePK pk = new UserMessagePK(); public UserMessagePK getPk(){ return pk; } public void setPk(UserMessagePK pk){ this.pk = pk; } public UserMessage(){ } @Transient public User getUser(){ return this.pk.getUser(); } @Transient public Message getMessage(){ return this.pk.getMessage(); } public void setUser(User user){ this.pk.setUser(user); } public void setMessage(Message message){ this.pk.setMessage(message); } } </code></pre> <p><strong>UserMessagePK.java</strong></p> <pre><code>@Embeddable public class UserMessagePK implements Serializable { private static final long serialVersionUID = 1L; @ManyToOne private User user; @ManyToOne(cascade = CascadeType.REFRESH) private Message message; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Message getMessage() { return message; } public void setMessage(Message message) { this.message = message; } public UserMessagePK(User user, Message message){ this.user = user; this.message = message; } public UserMessagePK(){ } } </code></pre> <p>What is wrong?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload