2016-09-21 42 views
0

我使用Spring的數據,並試圖獲取一個實體,但它無法加載其子元素,請參閱下面的代碼:無法轉換爲內部表示春季數據JPA

@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] 

謝謝。

+0

我已經檢查過,列的名稱與entity.Am中定義的相同,我缺少某些東西?我第一次使用Spring數據。 – Khushi

+1

請添加您的子實體代碼和表格定義。 –

+0

也是你的'發佈'類,或者是一個錯字?正常的'CrudRepository'方法工作嗎? –

回答

0

我已解決它。在我的子實體中,我有一個枚舉,在其他類中提取後,我可以獲取記錄。以前我的子實體是

private SubType isMailOrFtp; 
enum SubType { 
    SUB_MAIL, SUB_FTP 
} 

我從它刪除枚舉。

非常感謝