Java JPA@ManyToOne@JoinFormula抛出ClassCastException

Java JPA@ManyToOne@JoinFormula抛出ClassCastException,java,hibernate,hibernate-mapping,Java,Hibernate,Hibernate Mapping,我正在尝试使用JPA对多对一双向关联进行建模。联接使用一个公式。我试过几种方法,如下所示。一次使用just JoinFormula,另一次使用JoinColumnsOrFormulas public class JobOperation { private Operation operation; @ManyToOne // @JoinFormula("CASE WHEN attribute7 IS NULL OR TO_NUMBER(attrib

我正在尝试使用JPA对多对一双向关联进行建模。联接使用一个公式。我试过几种方法,如下所示。一次使用just JoinFormula,另一次使用JoinColumnsOrFormulas

public class JobOperation
{
  private Operation                 operation;

  @ManyToOne
  //  @JoinFormula("CASE WHEN attribute7 IS NULL OR TO_NUMBER(attribute7) = 0 THEN standard_operation_id ELSE TO_NUMBER(attribute7) END")
  @JoinColumnsOrFormulas(
  {
    @JoinColumnOrFormula(formula = @JoinFormula(//
        value = "(CASE WHEN this_.attribute7 IS NULL OR TO_NUMBER(this_.attribute7) = 0 THEN this_.standard_operation_id ELSE TO_NUMBER(this_.attribute7) END)", // 
        referencedColumnName = "standard_operation_id"))
  })
  @Fetch(FetchMode.SELECT)
  @NotFound(action = NotFoundAction.IGNORE)
  public Operation getOperation()
  {
    return this.operation;
  }
}
我最初使用的是Hibernate4.3.9,然后尝试使用Hibernate5.1.0。两者都会引发相同的异常:

15:55:21,408 DEBUG [org.hibernate.cfg.annotations.TableBinder] Retrieving property com.icumed.ifactory3.dto.wip.JobOperation.operation
15:55:21,409 DEBUG [org.hibernate.jpa.HibernatePersistenceProvider] Unable to build entity manager factory
java.lang.ClassCastException: org.hibernate.mapping.Formula cannot be cast to org.hibernate.mapping.Column
    at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:584)

Hibernate的TableBinder类中没有任何内容引用公式。是Hibernate不支持这一点,还是我使用了错误的注释,还是发生了其他事情?

问题的根本原因似乎在关联的另一端。我本来就有这个

public class Operation extends AbstractOperation
{
  @OneToMany(mappedBy="operation")
  public Set<JobOperation> getJobOperations()
  {
    return this.jobOperations;
  }
}
公共类操作扩展了抽象类操作
{
@OneToMany(mappedBy=“操作”)
公共集getJobOperations()
{
返回此文件。作业操作;
}
}
当我把它改成下面的时候,它起作用了

public class Operation extends AbstractOperation
{
  @OneToMany
  @JoinColumn(name="STANDARD_OPERATION_ID")
  public Set<JobOperation> getJobOperations()
  {
    return this.jobOperations;
  }
}
公共类操作扩展了抽象类操作
{
@独身癖
@JoinColumn(name=“标准操作ID”)
公共集getJobOperations()
{
返回此文件。作业操作;
}
}