【问题标题】:Many to Many Invalid Object name多对多无效对象名称
【发布时间】:2018-10-24 08:23:55
【问题描述】:

我在代码中的 Employee-Project 之间创建了多对多关系,但是当我想使用它时会抛出此异常:

com.microsoft.sqlserver.jdbc.SQLServerException:对象名称“employee_project”无效。

我试过了,但我没有成功找到这个异常的根本原因。所以,请帮助我。

以下是 Employee 和 Project 的 POJO 以及引发此异常的代码

员工pojo:

@Entity
@Table(name = "Employee")
public class Employee {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "EMPLOYEE_ID_PK")
private int employeeIdPk;

@ManyToMany(fetch = FetchType.LAZY,  cascade = {
        CascadeType.PERSIST,
        CascadeType.MERGE
        },
        mappedBy = "workers")
private Collection<Project> projects = new HashSet<Project>(0);
}

项目pojo:

@Entity
@Table(name = "Project")
public class Project {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "PROJECT_ID_PK")
private int projectIdPk;

@ManyToMany(fetch = FetchType.LAZY, cascade = {
        CascadeType.PERSIST,
        CascadeType.MERGE
    })
@JoinTable(name = "EmployeeProject", joinColumns = { 
        @JoinColumn(name = "PROJECT_ID_PK") }, 
        inverseJoinColumns = { @JoinColumn(name = "EMPLOYEE_ID_PK") })
Collection<Employee> workers = new HashSet<Employee>(0);
}

问题代码:

Project project = projectRepository.findByProjectIdPk(24);
Collection<Employee> employees = project.getWorkers();

我正在使用 Spring Data Jpa 和 SQL Server。 : Here is a picture of my current database

【问题讨论】:

  • @多对多关系我使用嵌入式表来定义它自己的存储库,我无法以这种方式做到这一点
  • @BasilBattikhi 但是我没有使用任何额外的列,为什么要使用嵌入式表?
  • 这不是正确的方法。按照以下链接查看已完成多少个映射thoughts-on-java.org/…

标签: java hibernate jpa orm many-to-many


【解决方案1】:

所以,我自己解决了这个问题。显然,如果我在 @JoinTable(Employee_Project) 内添加下划线并在数据库中更改它的工作原理。

有人能解释一下为什么我必须这样做吗?

【讨论】:

  • 您的场景在 Hibernate 测试套件中运行良好,所以我怀疑它与 Spring Data wrapper 或他们使用的 Spring Boot 命名策略覆盖有关,该策略会改变默认的 Hibernate 行为。
  • @Naros, stackoverflow.com/questions/25283198/… 这可能是问题所在。
  • 是的,我们在 Spring 使用的命名策略方面遇到了冲突问题。通常最好将它们专门覆盖为 Hibernate 使用的默认值,除非您正在升级需要旧命名行为的遗留应用程序。
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 2018-06-15
相关资源
最近更新 更多