我有两个实体。我想在持久化所有者实体时级联插入子实体,并将子实体的SSO_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.
}
相反,我得到了一个错误:
插入hub_users_emails(user_sso_idemail_typesso_idstart_dateuser_mail)值 (?, ?, ?, ?, ?)
(等)
绑定参数[1]as[BIGINT]-[1234837655]=
(等)
将参数[3]绑定为[BIGINT]-[null]=
SQL错误:904,SQLState:42000
o、 h.发动机。jdbc。spi。SqlExceptionHelper:ORA-00904:“用户\u SSO\u ID”:无效标识符
我尝试过其他一些一对多(双向、单向等)的设置,但似乎在所有实现之间都存在这个问题。
感谢帮助。
当您使用@ManyToOne和@OneToMore时,hibernate将在您的USER_EMAILS表上创建user_sso_id。我不知道你为什么要USER_EMAILS。我已经从USER_EMAILS移除了sso_id,现在它工作得很好。我知道这不是你问题的确切答案。以下代码可能会对您有所帮助。
@Entity(name = "USERS")
@Table(name = "USERS")
@Setter
@Getter
public class User {
@Id
@SequenceGenerator(name = "ID_GENERATOR", sequenceName = "ID_SEQUENCE")
@GeneratedValue(generator = "ID_GENERATOR" )
@Column(name = "SSO_ID")
private Long ssoId;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "user")
private List<UserEmail> userEmails = new ArrayList<>();
}
@Setter
@Getter
@Entity(name = "USER_EMAILS")
@Table(name = "USER_EMAILS")
@IdClass(UserEmailId.class)
public class UserEmail {
@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;
}
@Setter
@Getter
public class UserEmailId implements Serializable {
private String userMail;
private Date startDate;
private String emailType;
}
public class SomeClass{
public User saveUser(){
User user = new User();
UserEmail userEmail = new UserEmail();
userEmail.setUser(user);
userEmail.setEmailType("type");
userEmail.setStartDate(new Date());
userEmail.setUserMail("someEmail@gmail.com");
user.setUserEmails(Arrays.asList(userEmail));
userRepo.save(user);
}
}
用户表结构:用户 id、名称、用户名、密码、创建时间、更新时间 文章表结构:文章 id、标题、内容、创建时间、更新时间 关系表:文章\用户 id、文章id、用户id处于活动状态、创建时间、更新时间 标签 id、名称、用户id、创建时间、更新时间 透视表项目用户与标记的关系。表:文章\用户\标签 标签号,物品号,用户号 我想连接这些表,以便可以像这样或类似的格式访问 并且应该能够创建/更新smth,
我正在hibernate的帮助下开发一个电子购物程序。因为我是jsp、servlet、hibernate的新手,我不知道如何使用关系表中的附加列进行多对多关系映射。我已经阅读了几篇教程,但其中大部分都是关于hibernate社区的注释映射和文档,但没有一篇适合我的情况。 我有三个表,分别是电影信息表、订单详情表和订单详情表(关系表),其中订单详情表的结构如下所示。 我正在尝试使用四个POJO类来实
我想使用XML映射在Hibernate中映射多对多的关系。 我有两个类,和。我想创建一个链接表女巫将包含复合键和3个额外的列
我需要支持一个涉及以下实体的场景(使用JPA): 用户 一个用户可以有多个帐户,一个帐户可以在多个用户之间共享,这是迄今为止的标准@ManyToMany关系。 一个用户可以为每个帐户拥有一组不同的角色,一个角色可以在多个用户之间共享。 我遵循了这个实践,它解释了一种用额外列映射多对多关联的方法,但我不确定我是否得到了它。 用户实体: 账户实体: 用户帐户实体: 用户帐号: 我正在创建一个新用户并尝
我需要创建一个学生管理系统,它可以帮助多个老师教多个学生,多个学生可以有多个老师。现在我已经在下面创建了一个代码。另外,如果你认为有更好的方法来实现我的目标,请指导,我对多对多的关系是新的,互联网上有这么多方法,这只是让人困惑: 错误是: