我目前正在做一个旧项目,需要您的帮助。我绝对是Hibernate的初学者,所以请耐心等待。
因此,该应用程序使用了休眠4,它有几个有效的实体,数据库连接也有效。 因此,根据当前存在的内容,我创建了一个新实体来匹配我的JSON_REQUEST表。
entities.hbm.xml:
<hibernate-mapping>
<class entity-name="JsonRequest" name="com.dgp.cdn.model.impl.JsonRequest" table="JSON_REQUEST">
<id name="id" type="long" column="ID">
<generator class="sequence">
<param name="sequence">SEQ_JSON_REQUEST</param>
</generator>
</id>
<property name="status" column="STATUS" type="string">
<type name="org.hibernate.type.EnumType">
<param name="enumClass">com.dgp.cdn.model.CDNJsonRequestStatus</param>
<param name="useNamed">true</param>
</type>
</property>
<property name="requestType" column="REQUEST_TYPE" type="string">
<type name="org.hibernate.type.EnumType">
<param name="enumClass">com.dgp.cdn.model.CDNJsonRequestType</param>
<param name="useNamed">true</param>
</type>
</property>
<property name="fileId" column="FILE_ID" type="long" />
<property name="nodeId" column="NODE_ID" type="long" />
<property name="nbRetry" column="NB_RETRY" type="integer" />
<property name="creationDate" column="CREATION_DATE" type="timestamp" />
<property name="updateDate" column="UPDATE_DATE" type="timestamp" />
</class>
JsonRequest.java:
public class JsonRequest extends AbstractEntity /* provides an id field and its getter.setter */ implements Serializable {
private static final long serialVersionUID = 1L;
private CDNJsonRequestStatus status;
private CDNJsonRequestType requestType;
private Long fileId;
private Long nodeId;
private Integer nbRetry;
private Date creationDate;
private Date updateDate;
public JsonRequest() {
super();
}
public JsonRequest(CDNJsonRequestType requestType, Long fileId) {
super();
this.status = CDNJsonRequestStatus.TO_PROCESS;
this.requestType = requestType;
this.fileId = fileId;
this.nbRetry = 0;
}
public CDNJsonRequestStatus getStatus() {
return status;
}
public void setStatus(CDNJsonRequestStatus status) {
this.status = status;
}
public CDNJsonRequestType getRequestType() {
return requestType;
}
public void setRequestType(CDNJsonRequestType requestType) {
this.requestType = requestType;
}
public Long getFileId() {
return fileId;
}
public void setFileId(Long fileId) {
this.fileId = fileId;
}
public Long getNodeId() {
return nodeId;
}
public void setNodeId(Long nodeId) {
this.nodeId = nodeId;
}
public Integer getNbRetry() {
return nbRetry;
}
public void setNbRetry(Integer nbRetry) {
this.nbRetry = nbRetry;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
@Override
public String toString() {
return "JsonRequest [id=" + getId() + ", status=" + status + ", requestType=" + requestType + ", fileId=" + fileId
+ ", nodeId=" + nodeId + ", nbRetry=" + nbRetry + ", creationDate=" + creationDate + ", updateDate="
+ updateDate + "]";
}}
将映射放入具有应用程序属性中的实体的PersistenceMapping Bean中。
@Configuration
public class PersistenceConfiguration {
@Bean
public HibernateJpaSessionFactoryBean hibernateJpaSessionFactoryBean() {
return new HibernateJpaSessionFactoryBean();
}
@Bean
@ConfigurationProperties(prefix = "spring.jpa.mapping", ignoreUnknownFields = false)
public PersistenceMapping persistenceMapping() {
return new PersistenceMapping();
}
@Bean
public PersistenceBeanPostProcessor persistenceBeanPostProcessor() {
return new PersistenceBeanPostProcessor();
}
}
这是application.yml中的映射路径
spring:
datasource:
initialSize: 2
maxActive: 40
testWhileIdle: true
validationQueryTimeout: 5
jpa:
openInView: false
show_sql: true
generate-ddl: false
mapping:
resources:
<!-- other entities mapping that works -->
- META-INF/persistence/integration/entities.hbm.xml
- META-INF/persistence/integration/queries.hbm.xml
- META-INF/persistence/cdn/file/entities.hbm.xml
- META-INF/persistence/cdn/integration/nativefs/entities.hbm.xml
- META-INF/persistence/cdn/plugin/http/entities.hbm.xml
- META-INF/persistence/cdn/plugin/nimble/entities.hbm.xml
- META-INF/persistence/cdn/plugin/smooth/entities.hbm.xml
- META-INF/persistence/cdn/actionRequest/entities.hbm.xml
- META-INF/persistence/cdn/actionRequest/queries.hbm.xml
- META-INF/persistence/cdn/publicRequest/entities.hbm.xml
- META-INF/persistence/cdn/publicRequest/queries.hbm.xml
<!-- the new entity mapping i'm trying to impement -->
- META-INF/persistence/cdn/jsonStorage/entities.hbm.xml
<!-- this one is empty for now -->
- META-INF/persistence/cdn/jsonStorage/queries.hbm.xml
hibernate:
ddl-auto: none
naming-strategy: org.hibernate.cfg.EJB3NamingStrategy
properties:
hibernate.cache.use_second_level_cache: false
hibernate.cache.use_query_cache: false
hibernate.generate_statistics: true
hibernate.cache.region.factory_class: org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
hibernate.current_session_context_class: org.springframework.orm.hibernate4.SpringSessionContext
希望您能帮助我弄清楚我错过了什么。谢谢。
答案 0 :(得分:0)
因此,事实证明是因为使用了query={...}
。这导致休眠无法正确地将类绑定到映射。
我将其删除,并且它正在运行。
另外,我还必须将类型字符串删除到我的枚举属性中。