执行加载命令时出错:调用属性[Hibernate]的setter时发生IllegalArgumentException

时间:2015-04-24 18:29:07

标签: java hibernate

我正在尝试制作一个基于表格获取数据的组合框。所以我通过在我的数据库中添加一个新表继续我的项目(其他表可以在这里找到:link

CREATE TABLE IF NOT EXISTS `dat1`.`BILL` (
  `BILL_ID` int(4) NOT NULL primary KEY AUTO_INCREMENT,
  `BILL_DATE` DATE NOT NULL,
  `BILL_ORDER_ID` int(4) NOT NULL,
  foreign key (`BILL_ORDER_ID`) references `ORDER`(`ORDER_ID`)
);

我想从order_table获取orders_id(我将我的数据库表重命名为order_table)以填充我的组合框,所以我创建了一个ArrayList:

public ArrayList<Bill> returnBillList()
{
  Session session = factory.openSession();
  String hql = "FROM Bill";
  Query q = session.createQuery(hql);
  ArrayList<Bill> billList = new ArrayList(q.list());
  return billList;
}

billCheck bill_Check = new billCheck()
ArrayList<Bill> bill = bill_Check.returnBillList();
for (int i=0; i<bill.size(); i++){
    jComboBox1.addItem(bill.get(i).getBill_order().getCustomerList().getCustomerList_id());
}

每当我运行我的代码时,我都会得到这个输出:

ERROR: HHH000123: IllegalArgumentException in class: dat3.Bill, setter method of property: bill_order
apr. 24, 2015 8:51:55 PM org.hibernate.property.BasicPropertyAccessor$BasicSetter set
ERROR: HHH000091: Expected type: int, actual value: dat3.Orders_$$_jvst3b6_2
apr. 24, 2015 8:51:55 PM org.hibernate.property.BasicPropertyAccessor$BasicSetter set
ERROR: HHH000123: IllegalArgumentException in class: dat3.Orders, setter method of property: customerList
apr. 24, 2015 8:51:55 PM org.hibernate.property.BasicPropertyAccessor$BasicSetter set
ERROR: HHH000091: Expected type: int, actual value: dat3.MCustomerList_$$_jvst3b6_0
apr. 24, 2015 8:51:55 PM org.hibernate.event.internal.DefaultLoadEventListener onLoad
INFO: HHH000327: Error performing load command : IllegalArgumentException occurred while calling setter for property [dat3.Orders.customerList (expected type = int)]; target = [dat3.Orders@30410a1f], property value = [dat3.MCustomerList@43a0e9ca]
Exception in thread "AWT-EventQueue-0" IllegalArgumentException occurred while calling setter for property [dat3.Orders.customerList (expected type = int)]; target = [dat3.Orders@30410a1f], property value = [dat3.MCustomerList@43a0e9ca]
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:123)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:713)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:362)
    at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:4712)
    at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:188)
    at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:144)
    at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.performTwoPhaseLoad(AbstractRowReader.java:244)
    at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishUp(AbstractRowReader.java:215)
    at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:140)
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:138)
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:102)
    at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:186)
    at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4120)
    at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:502)
    at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:467)
    at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:212)
    at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:145)
    at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1066)
    at org.hibernate.internal.SessionImpl.immediateLoad(SessionImpl.java:972)
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:173)
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:285)
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
    at dat3.Orders_$$_jvst3b6_2.toString(Orders_$$_jvst3b6_2.java)
    at java.util.Formatter$FormatSpecifier.printString(Formatter.java:2886)
    at java.util.Formatter$FormatSpecifier.print(Formatter.java:2763)
    at java.util.Formatter.format(Formatter.java:2520)
    at java.util.Formatter.format(Formatter.java:2455)
    at java.lang.String.format(String.java:2928)
    at org.hibernate.PropertySetterAccessException.<init>(PropertySetterAccessException.java:47)
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:123)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:713)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:362)
    at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:4712)
    at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:188)
    at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:144)
    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:1114)
    at org.hibernate.loader.Loader.processResultSet(Loader.java:972)
    at org.hibernate.loader.Loader.doQuery(Loader.java:920)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354)
    at org.hibernate.loader.Loader.doList(Loader.java:2551)
    at org.hibernate.loader.Loader.doList(Loader.java:2537)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2367)
    at org.hibernate.loader.Loader.list(Loader.java:2362)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:496)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:229)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1260)
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)
    at dat3.billCheck.returnBillList(billCheck.java:77)
    at dat3.Bill_form.<init>(Bill_form.java:44)
    at dat3.Bill_form$6.run(Bill_form.java:431)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:749)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:702)
    at java.awt.EventQueue$3.run(EventQueue.java:696)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:719)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.IllegalArgumentException: argument type mismatch
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:68)
    ... 64 more

MCustomerList.java

public class MCustomerList {
private int customerList_id;
private String c_name;
private String c_l_name;
private String c_p_code;
private String c_email;
private String c_phone_nr;
private String c_user_type;
private String c_password;

public MCustomerList(){}

public MCustomerList(String c_name, String c_l_name, String c_p_code, String c_email, String c_phone_nr, String c_user_type, String c_password){
    this.c_name = c_name;
    this.c_l_name = c_l_name;
    this.c_p_code = c_p_code;
    this.c_email = c_email;
    this.c_phone_nr = c_phone_nr;
    this.c_user_type = c_user_type;
    this.c_password = c_password;
} 
...
...
getters & setters

Orders.java

public class Orders {
private int order_id;
private Date order_date;
private MCustomerList customerList;
private M_Services m_service;

public Orders() {}

public Orders(Date order_date, MCustomerList customerList, M_Services m_service){
    this.order_date = order_date;
    this.customerList = customerList;
    this.m_service = m_service;
}
...
...
getters & setters

Bill.java

public class Bill {
private int bill_id;
private Date bill_date;
private Orders bill_order;

public Bill() {}

public Bill(Date bill_date, Orders bill_order){
    this.bill_date = bill_date;
    this.bill_order = bill_order; 
}
...
...
getters & setters

我很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

在hibernate映射中检查数据类型是否与您在数据库中分配的数据类型相符。例如:

    <class name="productOffers" table="productOffers">
        <id name="product_id" column="ProductID" type="integer">
            <generator class="assigned"></generator>
        </id>
        <property name="offer_id" column="OfferID" type="integer"></property>
    </class> 

此处为propery类型,它必须与您在数据库中声明的数据类型匹配。