[
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