Java 具有映射属性的实体的Hibernate查询
我一直在hibernate中处理一个查询来更新实体的状态。这种名为PaymentRequestLink的实体与另一个名为extraparameters的实体存在一对多关系 PaymentRequestType.java:Java 具有映射属性的实体的Hibernate查询,java,hibernate,Java,Hibernate,我一直在hibernate中处理一个查询来更新实体的状态。这种名为PaymentRequestLink的实体与另一个名为extraparameters的实体存在一对多关系 PaymentRequestType.java: @Entity @Table(name="payment_link") public class PaymentRequestLink { private Map<String, ExtraParameter<E>> extraParamet
@Entity
@Table(name="payment_link")
public class PaymentRequestLink {
private Map<String, ExtraParameter<E>> extraParameters;
@Fetch(FetchMode.SELECT)
@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name="extraparameter_payment_link",
schema=BaseEntity.DATABASE_SCHEMA, joinColumns=@JoinColumn(name="extraparameter_payment_link_id"))
@MapKeyColumn(name = "name", length=64, nullable = false)
public Map<String, ExtraParameter<String>> getExtraParameters() {
return extraParameters;
}
我要进行的查询是,当存储在extraparameters中的过期日期是当前日期之前的日期时,将PaymentRequestLink的状态更新为EXPIRED。
这是我现在的疑问:
String stateSentence = "AND state <> '";
String sqlUpdateLinkDetailed = "UPDATE PaymentRequestLink ld SET state='EXPIRED' " +
"WHERE extraParameters.EXPIRATION_DATE.value <= ? " +
stateSentence + PaymentRequestLinkState.PAID;
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE, 1);
Timestamp now = new Timestamp(calendar.getTimeInMillis());
hibernateTemplate.bulkUpdate(sqlUpdateLinkDetailed, now);
String stateservice=“AND state'”;
字符串sqlupdatelinekdetailed=“UPDATE PaymentRequestLink ld SET state='EXPIRED'”+
“其中extraParameters.EXPIRATION\u DATE.value
索引集合的元素(数组、列表和映射)可以是
仅在where条款中通过索引引用:
String stateservice=“AND state'”;
字符串sqlupdatelinekdetailed=“UPDATE PaymentRequestLink ld SET state='EXPIRED'”+
“extraParameters['EXPIRATION_DATE']的位置。值可以显示整个ExtraParameter类吗?您的问题是否得到了回答?”?如果没有,请提供反馈以增强答案。
extraparameter_payment_link_id extra_type extra_value name
1 java.sql.Date 2019-01-01 EXPIRATION_DATE
String stateSentence = "AND state <> '";
String sqlUpdateLinkDetailed = "UPDATE PaymentRequestLink ld SET state='EXPIRED' " +
"WHERE extraParameters.EXPIRATION_DATE.value <= ? " +
stateSentence + PaymentRequestLinkState.PAID;
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE, 1);
Timestamp now = new Timestamp(calendar.getTimeInMillis());
hibernateTemplate.bulkUpdate(sqlUpdateLinkDetailed, now);
error processing job
org.springframework.orm.hibernate3.HibernateQueryException: could not resolve property: EXPIRATION_DATE of: component[type,value] [UPDATE
com.some.company.PaymentRequestLink ld SET state='EXPIRED' WHERE extraParameters.EXPIRATION_DATE.value <= ? AND state <> 'PAID']; nested exception is org.hibernate.QueryException: could not resolve property: EXPIRATION_DATE of: component[type,value] [UPDATE com.some.company.PaymentRequestLink ld SET state='EXPIRED' WHERE extraParameters.EXPIRATION_DATE.value <= ? AND state <> 'PAID']
String stateSentence = "AND state <> '";
String sqlUpdateLinkDetailed = "UPDATE PaymentRequestLink ld SET state='EXPIRED' " +
"WHERE extraParameters['EXPIRATION_DATE'].value <= ? " +
stateSentence + PaymentRequestLinkState.PAID;