ManyToMany关系和两个变体中的列命名

时间:2017-12-14 23:07:04

标签: java spring hibernate spring-mvc spring-boot

用户有两个朋友邀请列表的映射

@ManyToMany
@JoinTable(
        name = "users_invitations",
        joinColumns = {
                @JoinColumn(name = "user_id", referencedColumnName = "id", nullable = false, updatable = false)
        },
        inverseJoinColumns = {
                @JoinColumn(name = "user_invited_id", referencedColumnName = "id", nullable = false, updatable = false)
        }
)
private List<UserEntity> sentInvitations;

@ManyToMany
@JoinTable(
        name = "users_invitations",
        joinColumns = {
                @JoinColumn(name = "user_invited_id", referencedColumnName = "id", nullable = false, updatable = false)
        },
        inverseJoinColumns = {
                @JoinColumn(name = "user_id", referencedColumnName = "id", nullable = false, updatable = false)
        }
)
private List<UserEntity> receivedInvitations;

第一个列表是发送的邀请,第二个列表是收到的邀请。不同之处在于列joinColumns的命名,因此第一个字母将是用户发送的邀请和发送给用户的第二个邀请。不幸的是,它无法编译,因为它被丢弃

[EL Warning]: 2017-12-14 23:52:04.361--UnitOfWork(1221584693)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.7.0.v20170811-d680af5): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: t0.user_invited_id column does not exist
  Pozycja: 243
Error Code: 0
Call: SELECT t1.ID, t1.activation_token, t1.EMAIL, t1.email_change_token, t1.ENABLED, t1.modified_date, t1.new_email, t1.PASSWORD, t1.registration_date, t1.USERNAME, t1.UUID FROM users_invitations t0, users t1 WHERE ((t0.user_id = ?) AND (t1.ID = t0.user_invited_id))
bind => [1 parameter bound]
Query: ReadAllQuery(name="sentInvitations" referenceClass=UserEntity sql="SELECT t1.ID, t1.activation_token, t1.EMAIL, t1.email_change_token, t1.ENABLED, t1.modified_date, t1.new_email, t1.PASSWORD, t1.registration_date, t1.USERNAME, t1.UUID FROM users_invitations t0, users t1 WHERE ((t0.user_id = ?) AND (t1.ID = t0.user_invited_id))")

ERROR: t0.user_invited_id column does not exist

该异常表明该列不存在。如何解决?

1 个答案:

答案 0 :(得分:1)

@ManyToMany中的名称值(此处为“users_invitations”)相同。

 @ManyToMany
 @JoinTable(
        name = "users_invitations",

名称值应该不同。