我有两堂课:
@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/