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

Hibernate中的ManyToOne关系出错[重复]

毕黎昕
2023-03-14

我有两门课:

@Entity
@Table(name = "user_role",uniqueConstraints = @UniqueConstraint(columnNames = {"role","username"}))
public class UserRole {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_role_id", unique = true, nullable = false)
    private Integer userRoleId;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "username", nullable = false)
    private User user;
    @Column(name = "role",nullable = false, length = 45)
    private String role;
@Entity
@Table(name = "users")
public class User {
    @Column(name = "firstname", nullable = false)
    private String firstName;
    @Column(name = "lastname", nullable = false)
    private String lastName;
    @Column(name = "surname", nullable = true)
    private String surName;
    @Id
    @Column(name = "username", unique = true, nullable = false, length = 45)
    private String username;
    @Column(name = "password", nullable = false, length = 60)
    private String password;
    @Column(name = "email", nullable = false, length = 255)
    private String email;
    @Column(name = "enabled", nullable = false)
    private boolean enabled;
    @OneToMany(fetch = FetchType.LAZY)
    private Set<UserRole> userRole = new HashSet<>(0);
    @OneToMany(fetch = FetchType.LAZY)
    private List<AddressBook> addressBooks = new ArrayList<>(0);
    @OneToMany(fetch = FetchType.LAZY)
    private List<Message> messages = new ArrayList<>(0);

当我用UserRole保存User时,出现了一个奇怪的错误:

2016-03-16 16:52:36.480 DEBUG 8280 --- [nio-8090-exec-9] org.hibernate.SQL                        : insert into users_user_role (users_username, user_role_user_role_id) values (?, ?)
2016-03-16 16:52:36.489 DEBUG 8280 --- [nio-8090-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper   : could not execute statement [n/a]

org.postgresql.util.PSQLException: ERROR: column "user_role_user_role_id" of relation "users_user_role" does not exist

如果它创建了userrole_user_role_id,为什么要使用User_Role_ID?我该怎么修好它?

共有1个答案

鞠建安
2023-03-14

user中的userRole映射更改为

@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
private Set<UserRole> userRole = new HashSet<>(0);

mappedby是Hibernate必须要知道这是双向关系的另一面。

 类似资料:
  • 我在一个实体上有一个简单的单向ManyToOne关系,不幸的是,这个关系是在一个我无法更改的模式中定义的。

  • @没有复合关系的多通关系可以正常工作: 这执行1SQL查询,仅从Telefoni表中获取一行,持续约10ms。 但是,当添加任何带有复合@JoinColumns的@manytone关系时,延迟抓取将停止工作: 这将执行37个SQL查询,急切地获取每个父实体和每个父实体的父实体,直到解决所有关系。这将持续大约600毫秒。 由于向我的实体添加了一个额外的关系,我的性能下降了60倍...除了更改我的数据

  • 我是JPA新手,现在学习如何通过关系连接两个表。我得到的实体来自数据库。我有两张桌子,分别是Department和Employee。许多员工属于一个部门。 部门 雇员 多对一 错误

  • 我想在(您可以将其视为Student)实体和实体之间实现一个@ManyTomany单向的。很简单,一个教室可以有很多学生,而学生可以有很多教室。我希望它是单向的,因为我希望班级只知道它包含什么学生,学生不必知道他们有什么班级。这就是我目前所拥有的: ClassRoom.java Account.java 我通过以下代码保存它(使用Spring JPA): 但我得到了以下错误: 下面是StackTr

  • 我正在尝试在 /addNewUser 终结点上使用以下 POST 请求创建新用户:- 发布请求 UserController类:- 用户服务类:- 用户存储库界面 但我得到了以下例外:- 用户模型类 AuthoritiesModel类:- 最初,我认为我的post请求或Jackson API的反序列化存在一些问题,所以我打印了控制器方法中UserModel字段的值,并且所有值都设置正确,包括Aut

  • 但是如果可能的话,我想避免这种情况,因为它迫使我定义n个构造函数,为我在投影中想要的n个字段组合定义n个构造函数。