Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] Persisting a Unidirectional OneToMany fails

Hello,

As I tried to point out in the stack overflow post, EclipseLink will update the foreign key in a second statement. This is stated in the design doc for the feature, specifically under Additional_improvements_to_consider here:
http://wiki.eclipse.org/EclipseLink/Development/JPA2.0/uni-directional_onetomany_mapping#Additional_improvements_to_consider

Feel free to file a bug to have these two statements merged into one if there isn't one, but for now, the feature requires a second statement and so you will need to either remove the not-null constraint, or delay constraint processing until the end of the transaction if your database is capable of it.

Best Regards,
Chris

On 18/10/2012 11:08 AM, Alon Gamliel wrote:
I'm trying to persist a very simple Unidirectional One to Many relationship, but EclipseLink (2.3.1) fails. Is this a bug or just a stupid mistake? my code is very simple. I also posted a bug on this issue, but it was rejected and I didn't understand the reason (https://bugs.eclipse.org/bugs/show_bug.cgi?id=391279).

Service Class (Parent):
-------------------------

@Entity
@Table(name = "tbl_service2")
public class Service implements Serializable {

     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name="service_id")
     public long serviceID;

     @Column(name="name")
     public String name;

     @OneToMany(cascade={CascadeType.ALL})
     @JoinColumn(name="service_id", referencedColumnName="service_id")
     public Set<Parameter>  parameters;
}

Parameter Class (Child):
-------------------------
(Of course there is "service_id" foreign key field in the database, which is not represented in the class, as it's unidirectional relation).

@Entity
@Table(name = "tbl_service_parameters2")
public class Parameter implements Serializable {

     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name="param_id")
     public long parameterID;

     @Column(name="name")
     public String name;
}

And this is the code:
-------------------------

     Service service = new Service();
     service.parameters = new HashSet<Parameter>();
     service.name = "test";
     Parameter param = new Parameter();
     param.name = "test";
     service.parameters.add(param);
     em.persist(service);
     em.flush();


I get this excaption:
-------------------------

Internal Exception: java.sql.SQLException: Field 'service_id' doesn't have a default value
Error Code: 1364
Call: INSERT INTO tbl_service_parameters2 (name) VALUES (?)
     bind =>  [test]

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


Back to the top