在hibernate限制下,java.util.Arrays$ArrayList不能强制转换为java.lang.String
我已经盯着这个问题太久了。执行.list()行时,spring会抛出一个与.add(Restrictions.in(“LocationCode”,locations))相关的异常 无法将java.util.Arrays$ArrayList转换为java.lang.String Restrictions.in应为(字符串,对象[])否 有人能指出我在通过限制时遗漏了什么吗在hibernate限制下,java.util.Arrays$ArrayList不能强制转换为java.lang.String,java,hibernate,hibernate-annotations,Java,Hibernate,Hibernate Annotations,我已经盯着这个问题太久了。执行.list()行时,spring会抛出一个与.add(Restrictions.in(“LocationCode”,locations))相关的异常 无法将java.util.Arrays$ArrayList转换为java.lang.String Restrictions.in应为(字符串,对象[])否 有人能指出我在通过限制时遗漏了什么吗 public List getIDsByDivision(String SelectedAccountCode,
public List getIDsByDivision(String SelectedAccountCode,
List SelectedDivision, String SelectedLocation) {
List IDs=null;
String result="--Select--";
Session session=null;
String[] locations=SelectedLocation.split(",");
try
{
session=sessionFactory.openSession();
if(null!=SelectedAccountCode && !SelectedAccountCode.equals("--Select--")
&&SelectedDivision.size()>0&&!SelectedDivision.equals("--Select--")
&&locations.length>0&&!SelectedLocation.equals("--Select--"))
{
IDs=session.createCriteria(Customer.class)
// TODO fix this to location
.setProjection(Projections.distinct(Projections.property("ID")))
.add(Restrictions.eq("AcctCode", SelectedAccountCode))
.add(Restrictions.eq("Division", SelectedDivision))
.add(Restrictions.in("LocationCode", locations ))
.list();
}
客户类别
package <removed>;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Customer {
@Id
private String ID;
@Column
private String Name;
private String AcctCode;
private String LocationCode;
private String Division;
private String ContactEmail;
public Customer(){}
public Customer(String iD, String name, String acctCode,
String locationCode, String division, String contactEmail) {
super();
ID = iD;
Name = name;
AcctCode = acctCode;
LocationCode = locationCode;
Division = division;
ContactEmail=contactEmail;
}
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getAcctCode() {
return AcctCode;
}
public void setAcctCode(String acctCode) {
AcctCode = acctCode;
}
public String getLocationCode() {
return LocationCode;
}
public void setLocationCode(String locationCode) {
LocationCode = locationCode;
}
public String getDivision() {
return Division;
}
public void setDivision(String division) {
Division = division;
}
public String getContactEmail() {
return ContactEmail;
}
public void setContactEmail(String contactEmail) {
ContactEmail = contactEmail;
}
}
包;
导入javax.persistence.Column;
导入javax.persistence.Entity;
导入javax.persistence.Id;
@实体
公共类客户{
@身份证
私有字符串ID;
@纵队
私有字符串名称;
私有字符串密码;
私有字符串位置码;
私人弦乐部;
私人字符串联系人电子邮件;
公共客户(){}
公共客户(字符串iD、字符串名称、字符串帐户代码、,
字符串位置代码、字符串分区、字符串联系人(电子邮件){
超级();
ID=ID;
名称=名称;
AcctCode=AcctCode;
位置代码=位置代码;
除法=除法;
ContactEmail=ContactEmail;
}
公共字符串getID(){
返回ID;
}
公共无效集合iD(字符串iD){
ID=ID;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
名称=名称;
}
公共字符串getAcctCode(){
返回AcctCode;
}
公共void setAcctCode(字符串acctCode){
AcctCode=AcctCode;
}
公共字符串getLocationCode(){
返回位置代码;
}
public void setLocationCode(字符串位置代码){
位置代码=位置代码;
}
公共字符串getDivision(){
回返司;
}
公共无效集除法(字符串除法){
除法=除法;
}
公共字符串getContactEmail(){
回复联系邮件;
}
public void setContactEmail(字符串contactEmail){
ContactEmail=ContactEmail;
}
}
关于问题的半假阳性,以下方法有效(我需要重构,但希望能理解要点):
(添加此项以确保完整性)
出于兴趣,你对空白有什么反对意见?我想我从来没有在你的
if
条件的每一行中看到过如此密集的代码。哈哈,读起来真的那么恐怖吗?如果是这样的话,我一定会继续改进我的风格。你能发布你的模型类(Customer
)吗?@DanielM:是的,是的。我会在每个运算符和操作数之间放置一个空格,并且我还会使用SelectedAccountCode!=空
而不是空=选择会计科目代码
。哦,我建议您也开始遵循Java命名约定——因此将参数设置为camelCased而不是PascalCased。我们需要知道Customer类是如何映射的。
String[] locations=SelectedLocation.split(",");
List<String> locs=new ArrayList<String>();
for(String l:locations)
{
locs.add(l);
}
.add(Restrictions.in("Division", SelectedDivision))
.add(Restrictions.in("LocationCode", locs.toArray(new String[locs.size()]) ))