【问题标题】:Managing many to many relationship with hibernate使用hibernate管理多对多关系
【发布时间】:2018-11-25 17:56:19
【问题描述】:

我正在制作简单的 spring mvc web 应用程序,并且我正在使用 hibernate 和 oracle。我有两个模型——用户和角色,我想定义它们之间的多对多关系。我看过几个教程并定义了我的模型,如下所示:

这是User类:

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

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_sequence")
    @SequenceGenerator(name = "id_sequence", sequenceName = "ID_SEQ")
    @Column(name = "Id")
    private int id;

    @Column(name = "Username")
    private String username;

    @Column(name = "Password")
    private String password;


    @ManyToMany
    (
        fetch = FetchType.LAZY,
        cascade = {
                      CascadeType.PERSIST,
                      CascadeType.MERGE
                  }
    )
    @JoinTable
    (
        name = "user_roles", 
        joinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") }, 
        inverseJoinColumns = { @JoinColumn(name = "role_id", referencedColumnName = "id") }
    )
    private Set<Role> roles = new HashSet<Role>(0);

    //getters and setters....
} 

这是Role类:

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

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_sequence")
    @SequenceGenerator(name = "id_sequence", sequenceName = "ID_SEQ")
    private int id;

    private String role;

    @ManyToMany
    (
        fetch = FetchType.LAZY, 
        cascade = {
                      CascadeType.PERSIST,
                      CascadeType.MERGE
                  },
        mappedBy = "roles"
    )
    private Set<User> users;

    //getters and setters....
}

当我在服务器上运行此应用程序时,我收到以下错误:

这个错误表明该表不存在,所以我感兴趣的是我应该手动创建它(我不这么认为)还是我在这里遗漏了什么?

【问题讨论】:

  • 配置文件中属性spring.jpa.hibernate.ddl-auto 的值是多少?应该是update
  • 我的配置文件中有这个:hibernate.hbm2ddl.auto=update
  • 尝试在表user_roles 上执行ALTER TABLE 时出现错误ORA-00942: table or view does not exist,引用表或视图AppUser。也许这提供了一个线索......
  • 此时我的数据库是空的,我期待从休眠中自动生成相应的表。应该先创建哪个表?

标签: java oracle hibernate spring-mvc


【解决方案1】:

只需将@ManyToMany 放在一个地方即可。

请删除角色实体中的@ManyToMany。 您可以查看下面的链接以使用 oracle 数据库处理 @ManyToMany。 我希望这会有所帮助:

https://gerardnico.com/jpa/many-to-many#oracle_database

【讨论】:

  • 哦对了!!我注意到您正在研究 oracle datanse,让我编辑我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多