java - Hibernate 中的 ManyToOne 关系错误

标签 java spring hibernate

我有两堂课:

@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 保存 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_user_role_id ? 我该如何修复它?

最佳答案

User 中的 UserRole 映射更改为

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

mappedBy 对于 Hibernate 来说是必须知道这是双向关系的另一端。

关于java - Hibernate 中的 ManyToOne 关系错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36036682/

相关文章:

java - Android 将 TextViews 添加到 fragment 中

java - Thymeleaf 复选框以及数据库中的对象列表

hibernate - spring jpa嵌套投影生成不正确的查询

java - 使用 hibernate session 获取对象而不使用事务

java.lang.ClassCastException : [Ljava. lang.Object;

java - Gradle 不会导入 bintray 依赖项,但不会抛出任何错误

java - 用于多人游戏的 MulticastSocket

java - 如何在变量名中使用方法?

java - 当 @Scheduled 触发时,在 SecurityContext 中未找到 Authentication 对象?

spring - 将手动创建的对象加载到 spring 上下文