[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[eclipselink-users] possible bug with Embeddables using ManyToOne?
|
Hello,
We are looking at EclipseLink as an ORM solution for a new project, so I
was trying to adapt one of our existing mappings (using Hibernate) and
ran into what looks like a bug in the 2.3.2 release.
If I take the following test entities:
@Entity
@Table(name = "product", schema = "ELTEST")
public class Product
{
@Id
@Column(name = "product_id")
Integer id;
}
@Embeddable
public class CustomerOrder
{
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "product_id", referencedColumnName = "product_id")
Product product;
}
@Entity
@Table(name = "customer", schema = "ELTEST")
public class Customer
{
@Id
@Column(name = "cust_id")
Integer id;
@ElementCollection(fetch = FetchType.LAZY)
@CollectionTable(name = "cust_order",
joinColumns = @JoinColumn(name = "cust_id"))
List<CustomerOrder> orders = new ArrayList<CustomerOrder>();
}
Version 2.3.2 throws an exception:
Exception [EclipseLink-93] (Eclipse Persistence Services -
2.3.2.v20111125-r10461):
org.eclipse.persistence.exceptions.DescriptorException
Exception Description: The table [cust_order] is not present in this
descriptor.
Descriptor: RelationalDescriptor(com.vtls.domain.test.Product -->
[DatabaseTable(ELTEST.product)])
From some debugging, it appears that the both the source and target
fields in the ManyToOne mapping in CustomerOrder is being set to
cust_order.product_id, causing it to look for the wrong table descriptor
when processing foreign keys.
The real target field name should be product.product_id. This seems to
be messing up at some post-processing step, because when I check the
original ManyToOneMapping created, it is using the proper field name
(product.product_id) for the target.
I tried the previous 2.2.1 release, and this problem doesn't happen.
I also discovered that if I change the mapping so the join column name
doesn't match the target column name:
@JoinColumn(name = "linked_product_id", referencedColumnName =
"product_id")
It works in both releases. Unfortunately I can't do this in our
production system since the schema is already created and in use. The
problem only seems to happen if the owner of the OneToMany relationship
is an Embeddable, not an Entity.
I'm pretty sure this is a bug and haven't been able to find anything
similer in Bugzillla, but I wanted to be sure before entering a new one.