Java 如何强制对jointable使用给定的表名?

Java 如何强制对jointable使用给定的表名?,java,spring,hibernate,jpa,relationship,Java,Spring,Hibernate,Jpa,Relationship,我正在使用SpringDataJPA并建立我的第一个多人关系。我将第一个对象“用户”定义为: 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;

我正在使用SpringDataJPA并建立我的第一个多人关系。我将第一个对象“用户”定义为:

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;
    }

这里发生了什么,当我显式地将联接表名设置为其他名称时,为什么会引用“ROLESET0_2;”之类的内容?如何强制使用我已经给出的表名?

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

尝试为两个类中的所有字段添加注释
@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;
       .......

       }

请共享您的导入语句
ROLESET0\u
是hibernate在其生成的查询中指定的别名。如果设置
spring.jpa.show sql=true
以查看hibernate生成的完整查询,可能会有所帮助。您还可以设置
spring.jpa.properties.hibernate.format_sql=true
,以使其更具可读性。@AmerQarabsa我已经在您创建时添加了导入语句requested@AndrewMairose请将您的注释添加为答案,以便我可以接受->它确实是一个别名,而不是查询中使用的名为的表,当您看到实际的查询时,这一点变得很明显。
org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates//module/userManagement/index.html]")
…
Caused by: org.attoparser.ParseException: could not extract ResultSet
…
Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
…
Caused by: java.sql.SQLSyntaxErrorException: ORA-00904: "ROLESET0_"."ROLE_ID": invalid identifier
    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;
       .......

       }