JPA - la Persistance d'une relation Un-à-Plusieurs

Peut-être que ce est une question stupide, mais il m'énerve.

J'ai un bi-directionnelle "un à plusieurs" de la relation de l'Employé pour les Véhicules. Lorsque je persiste un Employé dans la base de données pour la première fois (c'est à dire qu'il n'a pas d'identité attribué) je veux aussi ses associés Véhicules à être conservé.

Cela fonctionne très bien pour moi en ce moment, sauf que mon enregistré Véhicule entité n'est pas l'Employé mappés automatiquement, et dans la base de données employee_id colonne de clé étrangère dans le Véhicule de la table est null.

Ma question est, est-il possible d'avoir le Véhicule employé qui a persisté dans le même temps, l'Employé lui-même est persisté? Je me rends compte que l'Employé aurait besoin d'être sauvés en premier, puis le Véhicule enregistré par la suite. Peut JPA faire cela automatiquement pour moi? Ou dois-je faire quelque chose comme ce qui suit:

Vehicle vehicle1 = new Vehicle();
Set<Vehicle> vehicles = new HashSet<Vehicle>();
vehicles.add(vehicle1);

Employee newEmployee = new Employee("matt");
newEmployee.setVehicles(vehicles);
Employee savedEmployee = employeeDao.persistOrMerge(newEmployee);

vehicle1.setAssociatedEmployee(savedEmployee);
vehicleDao.persistOrMerge(vehicle1);

Merci!

Edit: Comme l'a demandé, voici mon mappages (sans toutes les autres méthodes, etc.)

@Entity
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="employee_id")
    private Long id;

    @OneToMany(mappedBy="associatedEmployee", cascade=CascadeType.ALL)
    private Set<Vehicle> vehicles;

    ...

}

@Entity 
public class Vehicle {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="vehicle_id")
    private Long id;

    @ManyToOne
    @JoinColumn(name="employee_id")
    private Employee associatedEmployee;

    ...
}

Je viens de réaliser que j'aurais dû la méthode suivante définie sur ma classe d'Employés:

public void addVehicle(Vehicle vehicle) {
    vehicle.setAssociatedEmployee(this);
    vehicles.add(vehicle);
}

Maintenant le code ci-dessus va ressembler à ceci:

Vehicle vehicle1 = new Vehicle();

Employee newEmployee = new Employee("matt");
newEmployee.addVehicle(vehicle1);
Employee savedEmployee = employeeDao.persistOrMerge(newEmployee);

Beaucoup plus simple et plus propre. Merci pour votre aide à tous!

InformationsquelleAutor JMM | 2009-11-25