I\'ve this ER diagram:
That was translated into these classes:
The reason for the error may lie in remote communicaton. The fact that you are using the facades implies that you are communicating with your backend remotely.
This would mean that the user
and notify
instances you are setting on the uhn
instance are sent to be persisted on the remote system, while the local instances never receive the generated ids.
To verify and fix this, you can extend your example:
After saving the user
and notify
, fetch them from your backend. This should return persisted instances with existing Ids. Then you can use them to store your uhn
relation.
EDIT: I have missed the fact that the UserHasNotify
is a stateful relationship with an embededd Id. In the code you never set this Id, so the provider misses it.
For this case, I would advise to use an IdClass
instead of an embededd Id - the mapping is more readable, so you would probably not have mapped the User
and Notify
relation twice - once in the embedded PK and once again in the entity ;)
Here is what it would look like:
public class UserHasNotifyPK implements Serializable {
private Notify notify;
private User user;
...
}
.
@Entity
@Table(name = "user_has_notify")
@IdClass(UserHasNotifyPK.class)
@NamedQueries({
@NamedQuery(name = "UserHasNotify.findAll", query = "SELECT u FROM UserHasNotify u")})
public class UserHasNotify implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "has_read")
private String hasRead;
@Id
@JoinColumn(name = "notify_id", referencedColumnName = "id", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Notify notify;
@Id
@JoinColumn(name = "user_id", referencedColumnName = "id", insertable = false, updatable = false)
@ManyToOne(optional = false)
private User user;
You can then try the same test again.