【发布时间】:2016-09-21 12:03:03
【问题描述】:
我正在使用 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);
我得到的异常是,检索 Sub(child entity) 时失败。我有从 Pub 到 Sub (Many to One) 的单向关系,这会导致以下错误吗?请推荐
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]
谢谢。
【问题讨论】:
-
我已经检查过了,列的名称与实体中定义的相同。我错过了什么吗?我是第一次使用 Spring 数据。
-
请添加子实体代码和表定义。
-
还有你的
Publication类,或者这是一个错字?正常的CrudRepository方法有效吗?
标签: java hibernate enums spring-data spring-data-jpa