JPA simple many-to-many with eclipselink

前端 未结 1 1247
别那么骄傲
别那么骄傲 2021-01-19 10:23

I\'ve this ER diagram:

\"enter

That was translated into these classes:

相关标签:
1条回答
  • 2021-01-19 11:27

    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.

    0 讨论(0)
提交回复
热议问题