Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] none of the @OneToMany fields are being persisted in an @Embeddable class

On 2011-06 -22, at 13:47, James Sutherland wrote:

> 
> Can you include the code you use to persist the object, and the log on finest
> of the transaction.


I have submitted this as a bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=349483 and included a test case as an attachment to this bug.
> 
> Do any errors or warnings occur on startup?

No - and note that eclipselink has no problem creating the table structure - it is just silently fails to persist the fields.

    create table Container (
        id integer not null auto_increment,
        simple varchar(255),
        incnt varchar(255),
        primary key (id)
    );

    create table Many (
        id integer not null auto_increment,
        name varchar(255),
        other integer not null,
        CONT_IDENTIFIER integer,
        primary key (id)
    );

    alter table Many 
        add index FK247A7F38FF7A25 (CONT_IDENTIFIER), 
        add constraint FK247A7F38FF7A25 
        foreign key (CONT_IDENTIFIER) 
        references Container (id);

> 
> It is odd to have a OneToMany in an Embeddable as they have no id, and note
> that the embeddable is not mapping the ID column that is being used in the
> join.

Surely the point of the embeddable is that it has the id of the object in which it is embedded - I can see nothing wrong logically with what I am trying to do - though I admit that it is a fairly advanced usage... The embeddable is not mapping the id column because it is the "many" side that is using a foreign key.


> 
> If you move the OneToMany to the parent, or change it to use a JoinTable
> instead of a JoinColumn does it work?
> 

the OneToMany works fine in the parent - using a JoinTable in the embeddable does not work either.
> 
> 
> Paul Harrison-8 wrote:
>> 
>> Hi,
>> 
>> I have a problem using eclipselink 2.2.0 in that none of the @OneToMany
>> fields are being persisted in and @Embeddable class. The partial source is
>> below with Container being the container class for the Emb class - The
>> tables are created as I would expect, but on trying to persist a Container
>> object none of Many objects are written to the database. Is this a bug or
>> am I doing something wrong?
>> 
>> @Entity
>> public class Container implements Serializable {
>> 
>>    @Id
>>    @GeneratedValue
>>    private int id;
>>    private String incnt;
>>    @Embedded
>>    private Emb em;
>> }
>> 
>> @Embeddable
>> public class Emb implements Serializable {
>> 
>> 
>>    protected String simple;
>> 
>>    @JoinColumn(name = "CONT_IDENTIFIER", referencedColumnName = "ID")
>>    @OneToMany(cascade = PERSIST, orphanRemoval = false)
>>    protected List<Many> lots;
>> }
>> 
>> @Entity
>> public class Many implements Serializable {
>> 
>> 	@Id
>> 	@GeneratedValue
>>        protected int id;
>> 	protected String name;
>> 	protected int other;
>> 	
>> }
>> 
>> 
> 
> 
> -----
> http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland 
> http://www.eclipse.org/eclipselink/
> EclipseLink ,  http://www.oracle.com/technology/products/ias/toplink/
> TopLink 
> Wiki:  http://wiki.eclipse.org/EclipseLink EclipseLink , 
> http://wiki.oracle.com/page/TopLink TopLink 
> Forums:  http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink , 
> http://www.nabble.com/EclipseLink-f26430.html EclipseLink 
> Book:  http://en.wikibooks.org/wiki/Java_Persistence Java Persistence 
> Blog:  http://java-persistence-performance.blogspot.com/ Java Persistence
> Performance 
> -- 
> View this message in context: http://old.nabble.com/none-of-the-%40OneToMany-fields-are-being-persisted-in-an-%40Embeddable-class-tp31851258p31902914.html
> Sent from the EclipseLink - Users mailing list archive at Nabble.com.
> 
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users






Back to the top