java - 在ManyToMany表, hibernate , Spring 中保存数据的问题

标签 java spring hibernate many-to-many

下面-父表-用户:

@Entity
@Table(name = "user")
public class User {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "username", length = 50, unique = true)
    @NotNull
    @Size(min = 4, max = 50)
    private String username;

    @Column(name = "password", length = 100)
    @NotNull
    @Size(min = 4, max = 100)
    private String password;

    @ManyToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER)
    @JoinTable(
            name = "user_role",
            joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
            inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id")})
    private List<Role> roles;


//constructor, getters/setters


在下面您可以找到带有角色的表:

@Entity
@Table(name = "role")
public class Role {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name", length = 50)
    @NotNull
    @Enumerated(EnumType.STRING)
    private RoleName name;

    @ManyToMany(mappedBy = "roles", fetch = FetchType.LAZY)
    private List<User> users;

//constructor, getters/setters


我将尝试通过以下方法保存用户:

private static SessionFactory sessionFactory;
private Session session;


    @Override
    public void saveUser(User user) {
        Role role = getRoleByName(RoleName.ROLE_ADMIN);
        user.getRoles().add(role );
        role.getUsers().add( user );
        session.persist(user);
    }

    public Role getRoleByName(RoleName name) {

        Query query = session.createQuery("SELECT r FROM Role r WHERE r.name= :name");
        query.setParameter("name", name);
        return (Role) query.uniqueResult();
    }


但是我有两个问题:
-首先-主要问题-我做错了事,无法保存新用户。
-第二个-我在getRoleByName的查询结果中没有null结果,但是当然,该角色存在于表user_roles中。

任何解决方案对我来说都是完美的。

先感谢您。

最佳答案

好的,目前的情况很酷!

@Override
    public void saveUser(User user) {
        Session currentSession = entityManager.unwrap(Session.class);
        Role role = getRoleByName(RoleName.ROLE_ADMIN);
        user.getRoles().add(role );
        role.getUsers().add( user );
        currentSession.persist(user);
    }

    public Role getRoleByName(RoleName name) {
        Session currentSession = entityManager.unwrap(Session.class);
        Query query = currentSession.createQuery("SELECT r FROM Role r WHERE r.name= :name");
        query.setParameter("name", name);
        return (Role) query.uniqueResult();
    }


但是仍然不要保存到数据库。没有错误。任何想法?

关于java - 在ManyToMany表, hibernate , Spring 中保存数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56841961/

相关文章:

java - Spring Boot中的外键问题-h2数据库

java - Hibernate SessionFactory getCurrentSession 在没有 Activity 事务的情况下无效

java - Hibernate setParameter 向字符串添加单引号

java - CrudRepository 中的自定义 SQL 查询

java - Box2d中如何控制时间?

java - 在java中打印具有实际大小的图像

java - 如何在应用程序更新中实现 "IMMEDIATE"?

java - Spring Boot连接Mongodb Atlas问题

java - 为一项任务预初始化数据的设计模式

java - Spring AbstractPdfView 在浏览器中显示已经创建的pdf