java JPA hibernate一对多关系创建额外的列名
我有两个实体。我想在持久化所有者实体时级联子实体的插入,并将子实体的SSO_ID设置为生成器为所有者生成的ID
@Entity(name = "USERS")
@Table(name = "USERS")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_GENERATOR")
@SequenceGenerator(name = "ID_GENERATOR", sequenceName = "ID_SEQUENCE")
@Column(name = "SSO_ID")
private Long ssoId;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private List<UserEmail> userEmails = new ArrayList<>();
// getters, setters etc.
}
@Entity(name = "USER_EMAILS")
@Table(name = "USER_EMAILS")
@IdClass(UserEmailId.class)
public class UserEmail {
@Id
@Column(name = "SSO_ID")
private Long ssoId;
@Id
@Column(name = "USER_MAIL")
private String userMail;
@Id
@Column(name = "START_DATE")
private Date startDate;
@Id
@Column(name = "EMAIL_TYPE")
private String emailType;
@ManyToOne(fetch = FetchType.LAZY)
private User user;
// getters, setters etc.
}
UserEmail
ID类是:
public class UserEmailId implements Serializable {
private Long ssoId;
private String userMail;
private Date startDate;
private String emailType;
// getters, setters etc.
}
相反,我得到了一个错误:
insert into hub_users_emails (user_sso_id, email_type, sso_id, start_date, user_mail) values (?, ?, ?, ?, ?)
(etc.)
binding parameter [1] as [BIGINT] - [1234837655] => this is user_sso_id
(etc.)
binding parameter [3] as [BIGINT] - [null] => this is the original sso_id
SQL Error: 904, SQLState: 42000
o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-00904: "USER_SSO_ID": invalid identifier
我尝试过其他一些一对多(双向、单向等)的设置,但似乎在所有实现之间都存在这个问题
谢谢你的帮助
# 1 楼答案
当您使用@manytone和@OneToMany时,hibernate将在您的user_EMAILS表上创建user_sso_id。我不知道你为什么想在用户的电子邮件上再加一个ssoId。 我已经从用户电子邮件中删除了sso_id,现在它工作正常。我知道这不是你问题的确切答案。下面的代码可能会对您有所帮助