I ran your code and it works correctly (when added @GeneratedValue(strategy = GenerationType.AUTO)to both identifiers).
em.getTransaction().begin();
TestOrder to = new TestOrder();
TestDetails td1 = new TestDetails();
TestDetails td2 = new TestDetails();
TestDetails td3 = new TestDetails();
to.setDetails(Arrays.asList(new TestDetails[] {td1, td2, td3}));
em.persist(to);
em.getTransaction().commit();
which leads to the following sqls:
[03/07/14 10:03:30] INFO jdbc.sqlonly: insert into test (orderid) values (1)
[03/07/14 10:03:30] INFO jdbc.sqlonly: insert into test_details (order_id_fk, id) values (NULL, 2)
[03/07/14 10:03:30] INFO jdbc.sqlonly: insert into test_details (order_id_fk, id) values (NULL, 3)
[03/07/14 10:03:30] INFO jdbc.sqlonly: insert into test_details (order_id_fk, id) values (NULL, 4)
[03/07/14 10:03:30] INFO jdbc.sqlonly: update test_details set order_id_fk=1 where id=2
[03/07/14 10:03:30] INFO jdbc.sqlonly: update test_details set order_id_fk=1 where id=3
[03/07/14 10:03:30] INFO jdbc.sqlonly: update test_details set order_id_fk=1 where id=4
, , , , , TestOrder ( @GeneratedValue).
(.. ) , @GeneratedValue IDENTITY, jpa , . jpa id, order_id_fk test_details .
PS. "--" TestDetails?