org.hibernate.PropertyAccessException: IllegalArgumentExcept
michael.c.small Dec 9, 2005 4:05 PMI'm struggling to solve the error I've been receiving. In overview, I have two types of people in the system, Provider and Clients. A Provider can have many ProviderContacts and a Client can have many ClientContacts. When I attempt to load a Client (which has a mapped collection to ClientContacts), I get an error.
This is the query I'm running:
SELECT c FROM Client c WHERE c.relationship.relationshipId LIKE :expression OR c.taxId LIKE :expression OR c.clientName LIKE :expression
This is the error I receive ...
14:41:37,846 ERROR [BasicPropertyAccessor] IllegalArgumentException in class: com.tasconline.client.ClientContact, setter method of property: client 14:41:37,846 ERROR [BasicPropertyAccessor] expected type: com.tasconline.client.Client, actual value: com.tasconline.provider.Provider 14:41:37,846 INFO [DefaultLoadEventListener] Error performing load command org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.tasconline.client.ClientContact.client at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:104) at org.hibernate.tuple.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:330) at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:188) at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3231) at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:126) at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842) at org.hibernate.loader.Loader.doQuery(Loader.java:717) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:223)
This is the Client entity:
@Entity
@Table(name="tasc_client")
@Inheritance(strategy=InheritanceType.JOINED,
discriminatorValue="Client")
@PrimaryKeyJoinColumn(name="fk_tasc_relationship_binding")
public class Client extends RelationshipBinding {
private static final String BINDING_TYPE = "Client";
private TaxId taxId;
private TaxFilingStatus taxFilingStatus;
private OrganizationName clientName;
private Address shippingAddress;
private Address billingAddress;
private Collection<ClientContact> contacts;
/**
*
*/
public Client() {
this.bindingType = BINDING_TYPE;
this.contacts = new LinkedList<ClientContact>();
}
/**
*
*/
@Embedded
@AttributeOverride(name="id", column=@Column(name="taxId"))
public TaxId getTaxId() {
return(this.taxId);
}
/**
*
*/
public void setTaxId(TaxId taxId) {
this.taxId = taxId;
}
/**
*
*/
@Transient
public TaxFilingStatus getTaxFilingStatus() {
return(this.taxFilingStatus);
}
/**
*
*/
@Transient
public void setTaxFilingStatus(TaxFilingStatus taxFilingStatus) {
this.taxFilingStatus = taxFilingStatus;
}
/**
*
*/
@Column(name="taxFilingStatus")
public String getTaxFilingStatusType(String taxFilingStatusType) {
if (this.taxFilingStatus == null) return(null);
return(this.taxFilingStatus.name());
}
/**
*
*/
public void setTaxFilingStatusType(String taxFilingStatusType) {
if (taxFilingStatusType == null) {
this.taxFilingStatus = null;
return;
} else {
for (TaxFilingStatus status: TaxFilingStatus.values()) {
if (status.name().equals(taxFilingStatusType)) {
this.taxFilingStatus = status;
return;
}
}
throw new IllegalArgumentException
("Invalid TaxFilingStatus: " + taxFilingStatusType);
}
}
/**
*
*/
@Embedded
@AttributeOverride(name="name", column=@Column(name="clientName"))
public OrganizationName getClientName() {
return(this.clientName);
}
/**
*
*/
public void setClientName(OrganizationName clientName) {
this.clientName = clientName;
}
/**
*
*/
@Embedded
@AttributeOverrides({
@AttributeOverride(name="address1", column=@Column(name="shippingAddress1")),
@AttributeOverride(name="address2", column=@Column(name="shippingAddress2")),
@AttributeOverride(name="city", column=@Column(name="shippingCity")),
@AttributeOverride(name="stateAbbreviation", column=@Column(name="shippingState")),
@AttributeOverride(name="deliveryArea", column=@Column(name="shippingDeliveryArea")),
@AttributeOverride(name="plusFour", column=@Column(name="shippingPlusFour"))
})
public Address getShippingAddress() {
return(this.shippingAddress);
}
/**
*
*/
public void setShippingAddress(Address shippingAddress) {
this.shippingAddress = shippingAddress;
}
/**
*
*/
@AttributeOverrides({
@AttributeOverride(name="address1", column=@Column(name="billingAddress1")),
@AttributeOverride(name="address2", column=@Column(name="billingAddress2")),
@AttributeOverride(name="city", column=@Column(name="billingCity")),
@AttributeOverride(name="stateAbbreviation", column=@Column(name="billingState")),
@AttributeOverride(name="deliveryArea", column=@Column(name="billingDeliveryArea")),
@AttributeOverride(name="plusFour", column=@Column(name="billingPlusFour"))
})
public Address getBillingAddress() {
return(this.billingAddress);
}
/**
*
*/
public void setBillingAddress(Address billingAddress) {
this.billingAddress = billingAddress;
}
/**
*
*/
@OneToMany(
mappedBy="client",
fetch=FetchType.EAGER,
cascade=CascadeType.ALL)
public Collection<ClientContact> getContacts() {
return(this.contacts);
}
/**
*
*/
public void setContacts(Collection<ClientContact> contacts) {
this.contacts = contacts;
}
/**
*
*/
@Transient
public Contact getPrimaryContact() {
// see if there is a primary
for (ClientContact contact: this.contacts) {
if (contact.isPrimary()) {
return(contact);
}
}
// no primary
return(null);
}
This is the ClientContact entity:
@Entity
@Table(name="tasc_client_contact")
@Inheritance
public class ClientContact extends ValueObject
implements Contact, Comparable<Contact> {
private Client client;
private Boolean primary;
private PersonName name;
private PhoneNumber homeNumber;
private PhoneNumber businessNumber;
private PhoneNumber faxNumber;
private PhoneNumber mobileNumber;
private EmailAddress emailAddress;
private Address address;
/**
*
*/
@ManyToOne(targetEntity=com.tasconline.client.Client.class,
fetch=FetchType.EAGER)
@JoinColumn(name="fk_tasc_client")
public Client getClient() {
return(this.client);
}
/**
*
*/
public void setClient(Client client) {
this.client = client;
}
/**
*
*/
@Column(name="primaryContact")
public Boolean isPrimary() {
return(this.primary);
}
/**
*
*/
public void setPrimary(Boolean primary) {
this.primary = primary;
}
/**
*
*/
@Embedded
public PersonName getName()
{
return(this.name);
}
/**
*
*/
public void setName(PersonName name)
{
this.name = name;
}
/**
*
*/
@Embedded
@AttributeOverrides({
@AttributeOverride(name="areaCode", column=@Column(name="homeNumberAreaCode")),
@AttributeOverride(name="trunk", column=@Column(name="homeNumberTrunk")),
@AttributeOverride(name="number", column=@Column(name="homeNumberNumber")),
@AttributeOverride(name="extension",column=@Column(name="homeNumberExtension"))
})
public PhoneNumber getHomeNumber()
{
return(this.homeNumber);
}
/**
*
*/
public void setHomeNumber(PhoneNumber homeNumber)
{
this.homeNumber = homeNumber;
}
/**
*
*/
@Embedded
@AttributeOverrides({
@AttributeOverride(name="areaCode", column=@Column(name="businessNumberAreaCode")),
@AttributeOverride(name="trunk", column=@Column(name="businessNumberTrunk")),
@AttributeOverride(name="number", column=@Column(name="businessNumberNumber")),
@AttributeOverride(name="extension",column=@Column(name="businessNumberExtension"))
})
public PhoneNumber getBusinessNumber()
{
return(this.businessNumber);
}
/**
*
*/
public void setBusinessNumber(PhoneNumber businessNumber)
{
this.businessNumber = businessNumber;
}
/**
*
*/
@Embedded
@AttributeOverrides({
@AttributeOverride(name="areaCode", column=@Column(name="faxNumberAreaCode")),
@AttributeOverride(name="trunk", column=@Column(name="faxNumberTrunk")),
@AttributeOverride(name="number", column=@Column(name="faxNumberNumber")),
@AttributeOverride(name="extension",column=@Column(name="faxNumberExtension"))
})
public PhoneNumber getFaxNumber()
{
return(this.faxNumber);
}
/**
*
*/
public void setFaxNumber(PhoneNumber faxNumber)
{
this.faxNumber = faxNumber;
}
/**
*
*/
@Embedded
@AttributeOverrides({
@AttributeOverride(name="areaCode", column=@Column(name="mobileNumberAreaCode")),
@AttributeOverride(name="trunk", column=@Column(name="mobileNumberTrunk")),
@AttributeOverride(name="number", column=@Column(name="mobileNumberNumber")),
@AttributeOverride(name="extension",column=@Column(name="mobileNumberExtension"))
})
public PhoneNumber getMobileNumber()
{
return(this.mobileNumber);
}
/**
*
*/
public void setMobileNumber(PhoneNumber mobileNumber)
{
this.mobileNumber = mobileNumber;
}
/**
*
*/
@Embedded
@AttributeOverride(name="address", column=@Column(name="emailAddress"))
public EmailAddress getEmailAddress()
{
return(this.emailAddress);
}
/**
*
*/
public void setEmailAddress(EmailAddress emailAddress)
{
this.emailAddress = emailAddress;
}
/**
*
*/
@Embedded
public Address getAddress() {
return(this.address);
}
/**
*
*/
public void setAddress(Address address) {
this.address = address;
}
}