是否可以创建一个@Entity不包含主键/ Id 的表(来自JPA注释的Hibernate )?
我知道这不是一个好主意; 表应该有一个主键.
能否帮助我如何使用一个公共连接表连接三个表?我有USER,APPLICATION和ROLE表.我希望将他们的ID加入名为USER_APP_ROLE(user.ID,application.ID,role.ID)的表中.
当我删除Join Many to Many中的Application或Role表时,我的代码正在运行.
我做了以下代码:
User.java
@ManyToMany (targetEntity=Role.class)
@JoinTable(name="USER_APPLICATION_ROLE",
joinColumns=@JoinColumn(name="USER_ID"),
inverseJoinColumns=@JoinColumn(name="ROLE_ID"))
private Collection<Role> roles;
@ManyToMany (targetEntity=Application.class)
@JoinTable(name="USER_APPLICATION_ROLE",
joinColumns=@JoinColumn(name="USER_ID"),
inverseJoinColumns=@JoinColumn(name="APPLICATION_ID"))
private Collection<Application> applications;
Run Code Online (Sandbox Code Playgroud)
Role.java
@ManyToMany(mappedBy="roles", targetEntity=User.class)
private Collection<User> users = new ArrayList<User>();
Run Code Online (Sandbox Code Playgroud)
Application.java
@ManyToMany(mappedBy="applications", targetEntity=User.class)
private Collection<User> users = new ArrayList<User>();
Run Code Online (Sandbox Code Playgroud)
当我尝试运行以下测试时:
user.getRoles().add(role1);
user.getRoles().add(role2);
role1.getUsers().add(user);
role1.getUsers().add(user);
role2.getUsers().add(user);
role2.getUsers().add(user);
user.getApplications().add(app1);
user.getApplications().add(app2);
app1.getUsers().add(user);
app2.getUsers().add(user);
......
session.beginTransaction();
session.save(user);
session.save(role1);
session.save(role2);
session.save(app1);
session.save(app2);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Hibernate: select seq_cm_user.nextval from dual
Hibernate: select seq_role.nextval from dual
Hibernate: select seq_role.nextval from dual
Hibernate: select seq_application.nextval from dual …Run Code Online (Sandbox Code Playgroud)