Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA:映射多个关系引用了不正确的列名_Java_Jpa_Orm_Spring Data Jpa - Fatal编程技术网

Java JPA:映射多个关系引用了不正确的列名

Java JPA:映射多个关系引用了不正确的列名,java,jpa,orm,spring-data-jpa,Java,Jpa,Orm,Spring Data Jpa,这个问题与我昨天问的有关。 我在Employee和SkillSet表之间有多对多关系,每个关系都有额外的numberOfYears列 employeeId skillSetId numberOfYears 10 101 2 由于EmployeeSkillSet表中没有ID列,所以我使用@IdClass来定义复合键 @Entity class Employee { private @Id Long id; @OneToMany(mapped

这个问题与我昨天问的有关。 我在Employee和SkillSet表之间有多对多关系,每个关系都有额外的numberOfYears列

employeeId  skillSetId  numberOfYears 
10          101         2
由于EmployeeSkillSet表中没有ID列,所以我使用
@IdClass
来定义复合键

@Entity
class Employee {
    private @Id Long id;
    @OneToMany(mappedBy="employeeId")
    private List<EmployeeSkillSet> skillSets;
}
class SkillSet {
    private @Id Long id;
}

@IdClass(EmpSkillKey.class)
@Entity
class EmployeeSkillSet {
    @Id 
    @Column("employee_id")
    private Long employeeId;
    @Id
    @Column("skill_id")
    private @Id Long skillId;

    @ManyToOne  
    private Employee employee;
    private int numberOfYears;
}

class EmpSkillKey{
   private int employeeId;
   private int skillId;
}


interface EmployeeRepository extends JPARepository{
   List<Employee> getEmployeesBySkillSetSkillId(long id);
}
生成的查询是这样的。(我已将其转换为员工用例,无法共享实际查询)

例外情况

WARN  - SqlExceptionHelper         - SQL Error: 207, SQLState: ZZZZZ
ERROR - SqlExceptionHelper         - Invalid column name 'employee'.
org.hibernate.exception.GenericJDBCException: could not extract ResultSet
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:91)
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.getResultSet(AbstractLoadPlanBasedLoader.java:449)
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeQueryStatement(AbstractLoadPlanBasedLoader.java:202)
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:137)
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:102)
    at org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.initialize(AbstractLoadPlanBasedCollectionInitializer.java:100)
    at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:693)
    at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:92)
    at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1933)
    at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:559)
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:261)
    at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:555)
    at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:143)
    at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:294)

可能是我无法在同一类中定义
@Id employeeId
@manytone employee
。但是如何解决这个问题呢?

不管怎样,我找到了解决办法。注释了
@ManyToOne
@JoinColumn
的关系以及实际的列名。不确定为什么它要求将
可更新
可插入
设置为
错误
。必须弄清楚我的基本知识:)

select ud.employee_id , ud.employee_id , ud.employee , ud.employee_value , rd.employee_id 
 from employee_skill_set ud left outer join employee rd 
 on ud.employee=rd.employee_id 
 where ud.employee_id=?
WARN  - SqlExceptionHelper         - SQL Error: 207, SQLState: ZZZZZ
ERROR - SqlExceptionHelper         - Invalid column name 'employee'.
org.hibernate.exception.GenericJDBCException: could not extract ResultSet
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:91)
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.getResultSet(AbstractLoadPlanBasedLoader.java:449)
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeQueryStatement(AbstractLoadPlanBasedLoader.java:202)
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:137)
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:102)
    at org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.initialize(AbstractLoadPlanBasedCollectionInitializer.java:100)
    at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:693)
    at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:92)
    at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1933)
    at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:559)
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:261)
    at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:555)
    at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:143)
    at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:294)
@IdClass(EmpSkillKey.class)
@Entity
class EmployeeSkillSet {
    @Id 
    @Column("employee_id")
    private Long employeeId;
    @Id
    @Column("skill_id")
    private @Id Long skillId;

    @JoinColumn(name="employee_id", insertable=false, updatable=false)
    @ManyToOne  
    private Employee employee;
    private int numberOfYears;
}