java - Hibernate 在映射 Java 类时不添加引用约束(Spring Boot 应用程序)
问题描述
第一次使用 Spring Boot 和 Hibernate。
我正在尝试将我的User.java和Role.java类映射到 NetBeans 中的 MySQL 数据库。除了一个细节,一切都很好。
当我在“服务”选项卡中使用 NetBeans 的数据库管理器界面转到生成的表 并尝试手动向user_role
表中添加一行(@ManyToMany 的结果)时,即使尚未创建用户或角色,它也可以让我这样做。例如,我希望它会提示我一些错误,指出我正在插入的用户 ID 不存在。
现在,我来自 PostgreSQL/Doctrine 背景,这可能就是为什么它对我来说有点奇怪,因为如果我要在pgAdmin中很好地做到这一点,那是一个很大的不。
请,如果这是默认行为,请告诉我如何覆盖它,如果不是,这是我在某处出现错误的代码。
用户.java
package hello;
import java.util.Set;
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Transient;
@Entity // This tells Hibernate to make a table out of this class
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
private String email;
private String username;
private String password;
private String passwordConfirm;
@ManyToMany(targetEntity = Role.class)
@Access(AccessType.FIELD)
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
private Set<Role> roles;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Transient
public String getPasswordConfirm() {
return passwordConfirm;
}
public void setPasswordConfirm(String passwordConfirm) {
this.passwordConfirm = passwordConfirm;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}
角色.java
package hello;
import javax.persistence.*;
import java.util.Set;
@Entity
@Table(name = "role")
public class Role {
private Long id;
private String name;
@ManyToMany(targetEntity = User.class, mappedBy = "roles")
@Access(AccessType.FIELD)
private Set<User> users;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
}
如果您需要更多信息,请询问。
解决方案
推荐阅读
- reactjs - 无法在客户端访问 gatsby 环境变量
- php - 使用 PHP isset 访问动态命名的提交按钮
- r - 绑定列表的特定元素
- node.js - Puppeteer 无法导航到 url (ERR_EMPTY_RESPONSE)
- sql-server - SQL Reporting Services - 顶部的参数以错误的格式显示
- pandas - 使用多级标题融化熊猫数据?
- mysql - 如何在 Ubuntu 16.04 中我选择的驱动器中导入 mysql 数据库?
- c - (3* - *p/(*q)+7) = 6 它是如何工作的?
- java - Spring Boot JPA 在 2.0.6.RELEASE 中工作,但 2.1.1.RELEASE 不适用于相同的 pom.xml
- javascript - 使用 initializeUnorderedBulkOp() mongoose 批量查找