为了账号安全,请及时绑定邮箱和手机立即绑定

我怎样才能强制使用给定的表名来连接?

我怎样才能强制使用给定的表名来连接?

慕斯709654 2023-04-13 14:06:37
我正在使用 Spring 数据 JPA 并正在建立我的第一个 ManyToMany 关系。我将第一个对象“用户”定义为:import javax.persistence.*;import java.util.Set;@Entity@Table(name = "SMX0_PAR_USER", schema = "SMX0_INPUT_DAY")public class User {    @Id    private String userID;    private String username;    @ManyToMany    @JoinTable(        name = "SMX0_PAR_USER_ROLE",        schema = "SMX0_INPUT_DAY",        joinColumns = @JoinColumn(name = "USER_ID", referencedColumnName = "userID"),        inverseJoinColumns = @JoinColumn(name = "ROLE_ID", referencedColumnName = "roleID")    )    private Set<Role> roleSet;    protected User(){    }    public User(String userID, String username){        this.userID = userID;        this.username = username;    }第二个对象“角色”定义为:import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.ManyToMany;import javax.persistence.Table;import java.util.Set;@Entity@Table(name = "SMX0_PAR_ROLE", schema = "SMX0_INPUT_DAY")public class Role {    @Id    private int roleID;    private String rolename;    @ManyToMany(mappedBy = "roleSet")    private Set<User> userSet;    protected Role(){    }    public Role(int roleID, String role){        this.roleID = roleID;        this.rolename = role;    }这两个类中的所有字段都有 getter 和 setter。在没有与角色的多对多关系的情况下获取用户非常有效。当尝试访问其中包含以下 thymeleaf 代码的页面时: <tr th:each="user : ${users}">     <td th:text="${user.getUserID()}">user ID</td>     <td th:text="${user.getUsername()}">username</td>     <td><span th:each="role : ${user.getRoleSet()}">         <span th:text="${role.getRolename()}">rolename</span>     </span></td></tr>这里发生了什么,当我明确地将连接表名称设置为其他名称时,为什么会引用“ROLESET0_”之类的内容?我怎样才能强制使用我已经给出的表名?
查看完整描述

2 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

ROLESET0_是 hibernate 在它生成的查询中分配的别名。spring.jpa.show-sql=true如果您设置查看 hibernate 正在生成的完整查询,可能会有所帮助。您还可以设置spring.jpa.properties.hibernate.format_sql=true以使其更具可读性。



查看完整回答
反对 回复 2023-04-13
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

@Column (name = "YourColumnName")尝试为两个类中的所有字段添加注释。


此外,referencedColumnName参数应该是该外键列引用的列的名称。


    public class User {

       @Id

       @Column(name = "YourColumnName")

       private int roleID;

       @Column(name = "YourColumnName")

       private String rolename;


       @ManyToMany

        @JoinTable(

        name = "SMX0_PAR_USER_ROLE",

        schema = "SMX0_INPUT_DAY",

        joinColumns = @JoinColumn(name = "USER_ID", referencedColumnName = "YourColumnName"),

        inverseJoinColumns = @JoinColumn(name = "ROLE_ID", referencedColumnName ="YourColumnName"))

        .....


        }


   public class Role {


       @Id

       @Column(name = "YourColumnName")

       private int roleID;

       @Column(name = "YourColumnName")

       private String rolename;

       .......


       }


查看完整回答
反对 回复 2023-04-13
  • 2 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信