obj.getLineItems() renvoie un ensemble d'instances détachées (elles ne sont pas associées à la session Hibernate en cours). Le moyen le plus simple de résoudre le problème consiste à fusionner le Purchase avant de valider la transaction :
purchase = session.merge(purchase);
De cette façon, l'opération de fusion sera en cascade sur le LineCommand associé instances.