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

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?


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:


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
>>> >>
>> >
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx


Oracle <>
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

Back to the top