Hi Greg,
That sounds like a bug to me. Could you send me your pojos and a small
snipplet of your application code as a test case?
You are talking about em.remove(article) and no @PreRemove in
ArticlePlacement resulting in a foreign key violation, correct?
Thanks,
-- markus.
Greg Ederer wrote:
> Markus Fuchs wrote:
>> Hi Greg,
>>
>> Do you get a foreign key violation w/o using @PreRemove callbacks in
>> your pojos? Are you using a current glassfish build?
>>
> Hi Markus,
>
> Yes. When I em.remove() an ArticlePlacement without the @PreRemove, I
> get a PSQLException (I'm using PostgreSQL) with a foreign key
> constraint violation message.
>
> I'm using v2b50.
>
> Thanks for the reply.
>
> Cheers,
>
> Greg
>> Thanks,
>>
>> -- markus.
>>
>> Greg Ederer wrote:
>>> I managed to get this working by adding the following to Article:
>>>
>>> @PreRemove
>>> public void beforeRemove()
>>> {
>>> List<ArticlePlacement> articlePlacements = getArticlePlacements();
>>> for(ArticlePlacement ap : articlePlacements)
>>> {
>>> ap.setArticle(null);
>>> }
>>> }
>>>
>>> And in ArticlePlacement:
>>>
>>> @PreRemove
>>> public void beforeRemove()
>>> {
>>> getArticleGroup().removeArticlePlacement(this);
>>> if(getArticle() != null)
>>> {
>>> getArticle().removeArticlePlacement(this);
>>> }
>>> }
>>>
>>> I have a feeling this is not the best way to handle this (and, I'm
>>> guessing that I'll feel like a dummy when I find out the correct way
>>> to do this, because it will be pretty obvious).
>>>
>>> Any advice welcome.
>>>
>>> Cheers,
>>>
>>> Greg
>>>
>>> Greg Ederer wrote:
>>>> Oops! Accidentally hit send. Please ignore previous post.
>>>>
>>>> I have a model containing three entity classes: Article,
>>>> ArticleGroup and ArticlePlacement. An ArticleGroup contains zero
>>>> or more ArticlePlacement objects. Each ArticlePlacement wraps an
>>>> Article (ArticlePlacement also has a start run date and an end run
>>>> date, which allows me to run an article in multiple groups during
>>>> different periods).
>>>>
>>>> So, in Article, I have:
>>>>
>>>> @OneToMany(mappedBy = "article", cascade=CascadeType.ALL)
>>>> private List<ArticlePlacement> articlePlacements = new
>>>> ArrayList<ArticlePlacement>();
>>>>
>>>> In ArticleGroup, I have:
>>>>
>>>> @OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE,
>>>> CascadeType.REFRESH})
>>>> @OrderBy("position ASC")
>>>> private List<ArticlePlacement> articlePlacements = new
>>>> ArrayList<ArticlePlacement>();
>>>>
>>>> And, in ArticlePlacement, I have:
>>>>
>>>> @ManyToOne
>>>> private Article article;
>>>>
>>>> @ManyToOne
>>>> private ArticleGroup articleGroup;
>>>>
>>>> @PreRemove
>>>> public void beforeRemove()
>>>> {
>>>> getArticleGroup().removeArticlePlacement(this);
>>>> getArticle().removeArticlePlacement(this);
>>>> }
>>>>
>>>> When I EntityManager.remove() an Article, I get a
>>>> java.util.ConcurrentModificationException due to the
>>>> getArticle().removeArticlePlacement(this) in @PreRemove, above.
>>>> But, if I comment this out, I get a "violates foreign key"
>>>> PSQLException.
>>>>
>>>> Can someone tell me how to deal with this situation correctly?
>>>>
>>>> Thanks!
>>>>
>>>> Greg
>>>>
>>>
>>>
>
>