当前位置: 首页 > 知识库问答 >
问题:

JPAHibernate一对多关系创建额外的列名

史劲
2023-03-14

我有两个实体。我想在持久化所有者实体时级联插入子实体,并将子实体的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.
}

UserEmailID类是:

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”:无效标识符

我尝试过其他一些一对多(双向、单向等)的设置,但似乎在所有实现之间都存在这个问题。

感谢帮助。

共有1个答案

蒋航
2023-03-14

当您使用@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关系。 一个用户可以为每个帐户拥有一组不同的角色,一个角色可以在多个用户之间共享。 我遵循了这个实践,它解释了一种用额外列映射多对多关联的方法,但我不确定我是否得到了它。 用户实体: 账户实体: 用户帐户实体: 用户帐号: 我正在创建一个新用户并尝

  • 我需要创建一个学生管理系统,它可以帮助多个老师教多个学生,多个学生可以有多个老师。现在我已经在下面创建了一个代码。另外,如果你认为有更好的方法来实现我的目标,请指导,我对多对多的关系是新的,互联网上有这么多方法,这只是让人困惑: 错误是: