转换为内部表示Spring数据JPA失败



我正在使用Spring数据并试图获取一个实体,但它未能加载其子元素,请参阅下面的代码:

@Entity
@Table(name = "Pub")
public class Pub {
    private Integer id;
    private Date plannedDate;
    private Date startDate;
    private Date endDate;
    private Sub sub;
    private Date creationDate;
    private Date updateDate;
    private String log;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "gen")
    @SequenceGenerator(name = "gen", sequenceName = "sq_gen", allocationSize = 1)
    @Column(name = "ID", length = 19)
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    @Column(name = "PLANNED_DATE")
    @Temporal(TemporalType.TIMESTAMP)
    public Date getPlannedDate() {
        return plannedDate;
    }
    public void setPlannedDate(Date plannedDate) {
        this.plannedDate = plannedDate;
    }
    @Column(name = "START_DATE")
    @Temporal(TemporalType.TIMESTAMP)
    public Date getStartDate() {
        return startDate;
    }
    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }
    @Column(name = "END_DATE")
    @Temporal(TemporalType.TIMESTAMP)
    public Date getEndDate() {
        return endDate;
    }
    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "SUB_ID")
    public Sub getSub() {
        return sub;
    }
    public void setSub(Sub sub) {
        this.sub = sub;
    }
    @Column(name = "CREATION_DATE" , nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    public Date getCreationDate() {
        return creationDate;
    }
    public void setCreationDate(Date creationDate) {
        this.creationDate = creationDate;
    }
    @Column(name = "UPDATE_DATE", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    public Date getUpdateDate() {
        return updateDate;
    }
    public void setUpdateDate(Date updateDate) {
        this.updateDate = updateDate;
    }
    @Basic(fetch=FetchType.LAZY)
    @Lob
    @Column(name = "LOG", nullable = false)
    public String getLog() {
        return log;
    }
    public void setLog(String log) {
        this.log = log;
    }
     public String toString() {
            return "" + id + " - " + status + " - " + subscription;
        }
}

在库

@Query("select p from Pub p where p.id=:pubId")
    public Publication getByPubIdId(@Param("pubId") Integer pubId);

异常我正在获得是,检索子(子实体)时失败。我有从Pub到Sub(多对一)的单向关系,这是否会导致以下错误?请建议

2016-09-21 13:47:32.912  WARN 1764 --- [nio-8090-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 17059, SQLState: 99999
2016-09-21 13:47:32.912 ERROR 1764 --- [nio-8090-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : Fail to convert to internal representation
2016-09-21 13:47:32.912  INFO 1764 --- [nio-8090-exec-1] o.h.e.internal.DefaultLoadEventListener  : HHH000327: Error performing load command : org.hibernate.exception.GenericJDBCException: Could not read entity state from ResultSet : EntityKey[com.entity.Sub#1283]
2016-09-21 13:47:33.240 ERROR 1764 --- [nio-8090-exec-1] o.a.c.c.C.[.[.[/].[servletContainer]     : Servlet.service() for servlet [servletContainer] in context with path [] threw exception [org.springframework.orm.jpa.JpaSystemException: Could not read entity state from ResultSet : EntityKey[com.Sub#1283]; nested exception is org.hibernate.exception.GenericJDBCException: Could not read entity state from ResultSet : EntityKey[com.entity.Sub#1283]] with root cause
java.sql.SQLException: Fail to convert to internal representation
    at oracle.jdbc.driver.CharCommonAccessor.getInt(CharCommonAccessor.java:147) ~[ojdbc6-11.2.0.2.0.jar:11.2.0.2.0]
    at oracle.jdbc.driver.T4CVarcharAccessor.getInt(T4CVarcharAccessor.java:818) ~[ojdbc6-11.2.0.2.0.jar:11.2.0.2.0]
    at oracle.jdbc.driver.OracleResultSetImpl.getInt(OracleResultSetImpl.java:928) ~[ojdbc6-11.2.0.2.0.jar:11.2.0.2.0]
    at oracle.jdbc.driver.OracleResultSet.getInt(OracleResultSet.java:434) ~[ojdbc6-11.2.0.2.0.jar:11.2.0.2.0]
    at org.hibernate.type.EnumType$OrdinalEnumValueMapper.getValue(EnumType.java:337) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final]
    at org.hibernate.type.EnumType.nullSafeGet(EnumType.java:231) ~[hibernate-core-5.0.9.Final.jar:5.0.9.Final]

谢谢。

我已经解决了。在我的子实体中,我有enum,在其他类中提取它后,我能够获取记录。之前我的子实体是

private SubType isMailOrFtp;
enum SubType {
  SUB_MAIL, SUB_FTP   
}

我删除了enum。

Thanks to lot

最新更新