Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] What is the correct way to remove master-detail relation

Hello
I don't understand how this all is managed by eclipselink.
When I do product.add(characteristic), the characteristic is inserted into the database. Everything works as I expected. When I do product.remove(characteristic), the characteristic is not removed from the database. Why not??

This is the mapping:
@OneToMany(mappedBy = "catalogProduct", cascade = { PERSIST, MERGE, REMOVE }) private List<Characteristic> characteristics = new ArrayList<Characteristic>();

Why is my characteristic not removed?

I would expect eclipselink to remove my characteristic when I do product.remove(characteristic), because of the cascade = REMOVE. Do I have to do entitymanager.remove(characteristic)? And if so, why do I have to do both?

Leon



Shaun Smith wrote:
Hi Leon,

In JPA, to delete an object in a collection you need to remove it from the collection and then call entityManager.remove(..). EclipseLink adds support for orphan management through a relationship defined as "private owned". If you specify that a collection is private owned then removing an element from the collection and committing your transaction will cause it to be deleted on the database. For more info see: http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG)#How_to_Use_the_.40PrivateOwned_Annotation

   Shaun

Leon Derks wrote:
> Hi Tim,
>
> I already tried that, but couldn't get it working.
> I will try it again.
>
> Thank you.
> Leon
>
>
> Tim Hollosy wrote:
>> Leon,
>> Remove it from your list directly, and as long as you have
>> CascadeType.REMOVE set on your relationship it will remove it from the
>> database.
>>
>> Tim
>>
>> On Mon, Jun 2, 2008 at 12:02 PM, Leon Derks <leon.derks@xxxxxxxxxx> wrote:
>> >>> Hello
>>>
>>> I have the follwing Objects:
>>>
>>> Product {
>>> List<Characteristic> characteristics;
>>> List<ImageInfo>imageInfos
>>> }
>>>
>>> Characteristic{
>>> Product product;
>>> }
>>> ImageInfo{
>>> Product product.
>>> }
>>>
>>> But what is the best way to remove a Characteristic object?
>>>
>>> I prefer doing: entityManager.remove(characteristic);
>>> But then the characteristic is still in the List in the Product. Why isn't
>>> the entity cache automatically updated?
>>> How can I clear the cache manually?
>>>
>>> Leon
>>>
>>>
>>> _______________________________________________
>>> eclipselink-users mailing list
>>> eclipselink-users@xxxxxxxxxxx
>>> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>>>
>>> >>
>>
>>
>> >
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users

--


Oracle <http://www.oracle.com>
Shaun Smith | Principal Product Manager, TopLink | +1.905.502.3094
Oracle Fusion Middleware
110 Matheson Boulevard West, Suite 100
Mississauga, Ontario, Canada L5R 3P4
------------------------------------------------------------------------

_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users



Back to the top