【问题标题】:error with ManyToOne relations in Hibernate [duplicate]Hibernate中的ManyToOne关系错误[重复]
【发布时间】:2016-07-02 09:24:46
【问题描述】:

我有 2 节课:

@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);

当我的应用第一次启动时,它会创建 3 个表:

users_user_role 与列 [users_username] [userrole_user_role_id];

用户与列[用户名] [电子邮件] [启用] [名字] [姓氏] [密码] [姓氏];

user_role 与列 [user_role_id] [role] [username]

当我用 UserRole 保存用户时,我有一个奇怪的错误:

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_user_role_id? 我该如何解决?

【问题讨论】:

  • 另外,看看这个answer
  • 可能是其他问题。我想更改自动生成的列名的左侧,因为它生成“user_role ...”,但在脚本中它使用“userrole ...”

标签: java spring hibernate


【解决方案1】:

User中的UserRole映射更改为

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

mappedBy 是 Hibernate 知道这是双向关系的另一端所必需的。

【讨论】:

  • 如果我这样做,休眠不会创建关系。
  • @NCNecros 你不需要@OneToMany 的连接表。您可以拥有一个,但通常没有必要。您需要的是依赖表中的单个连接列(在您的情况下为user_role),这就是您在我的示例中使用映射获得的。检查数据库中user_role 表中的user_username 列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 2018-06-09
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
相关资源
最近更新 更多