首先有2个表:
address(id,city,ref_id)
customer(id,name,address_id)
此处我customer一对一关联address的ref_id字段。而不关联address主键id
下面是源代码
@Entity
@Table(name = "address")
public class Address implements Serializable {
private int id;
private String city;
private int ref_id;
private Customer customer; @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getCity() {
return city;
} public void setCity(String city) {
this.city = city;
} @Column(nullable=false,name="ref_id")
public int getRef_id() {
return ref_id;
} public void setRef_id(int ref_id) {
this.ref_id = ref_id;
} @OneToOne(mappedBy = "address")
public Customer getCustomer() {
return customer;
} public void setCustomer(Customer customer) {
this.customer = customer;
}
}@Entity
@Table(name = "customer")
public class Customer {
private int id;
private String name;
private Address address; @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @OneToOne
@JoinColumn(name = "address_id", referencedColumnName = "ref_id")
public Address getAddress() {
return address;
} public void setAddress(Address address) {
this.address = address;
}
}
其中address类实现了Serializable接口;
但是报错了:
public class Demo {
public static void main(String[] args) {
EntityManager em = Factory.getEntityManager(); Address address=em.find(Address.class, 1);
em.close();
}
}
Hibernate: select address0_.id as id1_1_, address0_.city as city1_1_, address0_.ref_id as ref3_1_1_, customer1_.id as id0_0_, customer1_.address_id as address3_0_0_, customer1_.name as name0_0_ from address address0_ left outer join customer customer1_ on address0_.id=customer1_.address_id where address0_.id=?
Hibernate: select address0_.id as id1_1_, address0_.city as city1_1_, address0_.ref_id as ref3_1_1_, customer1_.id as id0_0_, customer1_.address_id as address3_0_0_, customer1_.name as name0_0_ from address address0_ left outer join customer customer1_ on address0_.id=customer1_.address_id where address0_.ref_id=?
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of Address.ref_id
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)
at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:195)
at Demo.main(Demo.java:9)
Caused by: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of Address.ref_id
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:171)
at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValue(AbstractComponentTuplizer.java:64)
at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValues(AbstractComponentTuplizer.java:70)
at org.hibernate.tuple.component.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:86)
at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:353)
at org.hibernate.type.ComponentType.getHashCode(ComponentType.java:184)
at org.hibernate.engine.EntityUniqueKey.generateHashCode(EntityUniqueKey.java:63)
at org.hibernate.engine.EntityUniqueKey.<init>(EntityUniqueKey.java:44)
at org.hibernate.type.EntityType.loadByUniqueKey(EntityType.java:596)
at org.hibernate.type.EntityType.resolve(EntityType.java:382)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854)
at org.hibernate.loader.Loader.doQuery(Loader.java:729)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1860)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3044)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:395)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:815)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:808)
at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:175)
... 1 more
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:145)
... 27 more希望告诉指点下:
address(id,city,ref_id)
customer(id,name,address_id)
此处我customer一对一关联address的ref_id字段。而不关联address主键id
下面是源代码
@Entity
@Table(name = "address")
public class Address implements Serializable {
private int id;
private String city;
private int ref_id;
private Customer customer; @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getCity() {
return city;
} public void setCity(String city) {
this.city = city;
} @Column(nullable=false,name="ref_id")
public int getRef_id() {
return ref_id;
} public void setRef_id(int ref_id) {
this.ref_id = ref_id;
} @OneToOne(mappedBy = "address")
public Customer getCustomer() {
return customer;
} public void setCustomer(Customer customer) {
this.customer = customer;
}
}@Entity
@Table(name = "customer")
public class Customer {
private int id;
private String name;
private Address address; @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @OneToOne
@JoinColumn(name = "address_id", referencedColumnName = "ref_id")
public Address getAddress() {
return address;
} public void setAddress(Address address) {
this.address = address;
}
}
其中address类实现了Serializable接口;
但是报错了:
public class Demo {
public static void main(String[] args) {
EntityManager em = Factory.getEntityManager(); Address address=em.find(Address.class, 1);
em.close();
}
}
Hibernate: select address0_.id as id1_1_, address0_.city as city1_1_, address0_.ref_id as ref3_1_1_, customer1_.id as id0_0_, customer1_.address_id as address3_0_0_, customer1_.name as name0_0_ from address address0_ left outer join customer customer1_ on address0_.id=customer1_.address_id where address0_.id=?
Hibernate: select address0_.id as id1_1_, address0_.city as city1_1_, address0_.ref_id as ref3_1_1_, customer1_.id as id0_0_, customer1_.address_id as address3_0_0_, customer1_.name as name0_0_ from address address0_ left outer join customer customer1_ on address0_.id=customer1_.address_id where address0_.ref_id=?
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of Address.ref_id
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)
at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:195)
at Demo.main(Demo.java:9)
Caused by: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of Address.ref_id
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:171)
at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValue(AbstractComponentTuplizer.java:64)
at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValues(AbstractComponentTuplizer.java:70)
at org.hibernate.tuple.component.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:86)
at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:353)
at org.hibernate.type.ComponentType.getHashCode(ComponentType.java:184)
at org.hibernate.engine.EntityUniqueKey.generateHashCode(EntityUniqueKey.java:63)
at org.hibernate.engine.EntityUniqueKey.<init>(EntityUniqueKey.java:44)
at org.hibernate.type.EntityType.loadByUniqueKey(EntityType.java:596)
at org.hibernate.type.EntityType.resolve(EntityType.java:382)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854)
at org.hibernate.loader.Loader.doQuery(Loader.java:729)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1860)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3044)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:395)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:815)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:808)
at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:175)
... 1 more
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:145)
... 27 more希望告诉指点下:
解决方案 »
- struts中el的内置标签的问题
- 问题越来越明了,但是我不知道怎么改,高手们救急,谢谢(此帖是再发贴)
- 请问将这个JavaScript改为Struts用,怎么改啊.
- 武汉:有没有人想学Java和J2EE?我收徒弟!
- servlet向jsp传递参数为什么会是NULL的(Vector)
- spring security 方法注解 strut2 Struts has detected an unhandled exception
- Java内存的疑问
- 要做个监控的程序,如何让我的java程序随web服务器启动一起运行?
- jsp中如何调用web serviceweb service 是用vb.net写的,目前在asp中调用没有问题!) ???
- 紧急求救,关于基类问题
- mybatis的参数问题
- 本机测试正常。上传到服务器,启动出现错误。求助哇
你传入的Address.class不对。网上搜一下。