首页 > 解决方案 > Hibernate 在映射 Java 类时不添加引用约束(Spring Boot 应用程序)

问题描述

第一次使用 Spring Boot 和 Hibernate。

我正在尝试将我的User.javaRole.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;
    }
}

如果您需要更多信息,请询问。

标签: javaspringhibernatespring-bootmany-to-many

解决方案


推荐阅读