Java 预期位置参数计数:2,实际参数:
大家好,我尝试执行代码时出现异常: 另外,请告诉我如何传递参数以进行查询或使用 我的刀:Java 预期位置参数计数:2,实际参数:,java,hibernate,Java,Hibernate,大家好,我尝试执行代码时出现异常: 另外,请告诉我如何传递参数以进行查询或使用 我的刀: @Override public Institution findWIthTwoParam(String name, Date mydate) { return (Institution)sessionFactory.getCurrentSession().createQuery( "select i from Institution i where
@Override
public Institution findWIthTwoParam(String name, Date mydate) {
return (Institution)sessionFactory.getCurrentSession().createQuery(
"select i from Institution i where i.nameOfInstitution =? and i.creationDate=?")
.setString(0, name)
.setParameter(1, mydate).uniqueResult();
}
我的异常堆栈:
Exception in thread "main" org.hibernate.QueryException: Expected positional parameter count: 2, actual parameters: [MyIstitution, Tue Apr 27 00:00:00 EST 17] [select i from Institution i where i.nameOfInstitution =? and i.creationDate=?]
at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:366)
at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:322)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:98)
at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:890)
at edu.demidov.dao.InsertDataService.findWIthTwoParam(InsertDataService.java:106)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy25.findWIthTwoParam(Unknown Source)
at edu.demidov.dao.AppTEst.main(AppTEst.java:76)
我的实体:
@Entity
@Table(name="INSTITUTION")
public class Institution implements Serializable{
private static final long serialVersionUID = -7636394097858726922L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="INSTITUTION_ID")
private int institutionId;
@Version
@Column(name="VERSION")
private int version;
@Column(name="NAME_INSTITUTION")
private String nameOfInstitution;
@Column(name="TYPE_NAME")
private String typeName;
@ManyToMany(mappedBy="institution", fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Set<CreationDate> creationDate = new HashSet<CreationDate>();
//getter and setter methods ommited
public String toString() {
return institutionId + " , " + nameOfInstitution + " , " + typeName
}
}
@实体
@表(name=“机构”)
公共类机构实现可序列化{
私有静态最终长serialVersionUID=-7636394097858726922L;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“机构ID”)
私人int机构ID;
@版本
@列(name=“VERSION”)
私有int版本;
@列(name=“name\u机构”)
机构的私有字符串名称;
@列(name=“TYPE\u name”)
私有字符串类型名;
@ManyToMany(mappedBy=“institution”,fetch=FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Set creationDate=new HashSet();
//getter和setter方法不匹配
公共字符串toString(){
返回institutionId+“,“+nameOfInstitution+”,“+typeName”
}
}
我的实体二:
@Entity
@Table(name="CREATION_DATE")
public class CreationDate implements Serializable {
private static final long serialVersionUID = 1648102358397071136L;
@Id
@GeneratedValue(strategy=IDENTITY)
@Column(name="DATE_ID")
private int dateId;
@Column(name="PARTICULAR_DATE")
private Date particularDate;
@Version
@Column(name="VERSION")
private int version;
@Temporal(TemporalType.DATE)
@Column(name="CHILD_GO_SCHOOL_DATE")
private Date childGoSchoolDate;
@Temporal(TemporalType.DATE)
@Column(name="CHILD_ADMISSION_DATE")
private Date childAdmissionDate;
@ManyToMany(fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@JoinTable(name="CREATIONDATE_INSTITUTION",
joinColumns=@JoinColumn(name="DATE_ID"),
inverseJoinColumns=@JoinColumn(name="INSTITUTION_ID"))
private Set<Institution> institution = new HashSet<Institution>();
@OneToMany(fetch=FetchType.EAGER, orphanRemoval=true)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@JoinTable(name="SRC_DATE", joinColumns=@JoinColumn(name="DATE_ID"),
inverseJoinColumns=@JoinColumn(name="SRC_ID"))
private List<ScheduleRotationChild> scheduleRotationChild = new ArrayList<ScheduleRotationChild>();
//getter and setter methods ommited
public String toString() {
return dateId + " , "
+ particularDate + " , "
+ childGoSchoolDate + " , "
+ childAdmissionDate + " " + scheduleRotationChild ;
}
}
@实体
@表(name=“创建日期”)
公共类CreationDate实现了可序列化{
私有静态最终长serialVersionUID=1648102358397071136L;
@身份证
@生成值(策略=标识)
@列(name=“DATE\u ID”)
私有数据ID;
@列(name=“特定日期”)
私人约会;
@版本
@列(name=“VERSION”)
私有int版本;
@时态(TemporalType.DATE)
@列(name=“儿童入学日期”)
私人约会孩子选择日期;
@时态(TemporalType.DATE)
@列(name=“儿童入学日期”)
私人日期儿童入院日期;
@ManyToMany(fetch=FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@JoinTable(name=“CREATIONDATE_INSTITUTION”,
joinColumns=@JoinColumn(name=“DATE\u ID”),
inverseJoinColumns=@JoinColumn(name=“INSTITUTION\u ID”))
private Set institution=new HashSet();
@OneToMany(fetch=FetchType.EAGER,orphan=true)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@JoinTable(name=“SRC\u DATE”,joinColumns=@JoinColumn(name=“DATE\u ID”),
inverseJoinColumns=@JoinColumn(name=“SRC_ID”))
私有列表scheduleRotationChild=新ArrayList();
//getter和setter方法不匹配
公共字符串toString(){
返回日期ID+“,”
+特定日期“,”
+childGoSchoolDate+“,”
+ChildApprovisionDate+“”+scheduleRotationChild;
}
}
请帮我解决它 您的
creationDate
是一个集合,因此您需要加入。集合本身包含CreationDate
的实例,而不是日期
最后,它看起来是这样的:
select i from Institution i JOIN i.creationDate d where i.nameOfInstitution =? and d.particularDate=?
我想参数索引是从1开始的(不是0)@hoaz我可以支持你,这是事实,它确实是从1开始的。谢谢你的回答。我试着照你们说的做,异常仍然发生在线程“main”org.hibernate.hql.ast.QuerySyntaxException中异常:预期加入的路径![从edu.demidov.dom.Institution中选择i,我加入creationDate d,其中i.nameOfInstitution=?和d.SpecialDate=?]非常感谢Jimmy,我已经这么做了。。。我为我愚蠢的重播感到抱歉。。。你知道我还是很好奇我做对了吗。。听着,我必须输入实体,我想把我的方法传递给参数,每个实体的每个参数,然后把它们放到查询中。我做得对吗?或者我应该考虑一些类似标准的查询。您能帮帮我吗。@VadimDemidov您的意思是
查找WithTwoParam()
?是的,先生。如果你能给我点时间的话。我想问你。我怎样才能用更好的风格做到这一点呢?只需将参数传递给我的方法,并提取与参数对应的数据???@vadimdemodov当前解决方案的问题是什么?