Hibernate - zapisywanie kolekcji z kluczem obcym

0

Witam,

mam problem z zapisem danych przy pomocy hibernate, mam zmapowane encje:

@Entity
public class UserDetail {

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id_user;
	private String name;
	@OneToMany(mappedBy="user", cascade=CascadeType.PERSIST)
	private Collection<Vehicle> vehicle = new ArrayList();
	
	public int getId_user() {
		return id_user;
	}
	public void setId_user(int id_user) {
		this.id_user = id_user;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Collection<Vehicle> getVehicle() {
		return vehicle;
	}
	public void setVehicle(Collection<Vehicle> vehicle) {
		this.vehicle = vehicle;
	}
	
}
@Entity
public class Vehicle {
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id_vehicle;
	private String name;
	@ManyToOne
	@JoinColumn(name="user_id")
	private UserDetail user;
	
	public int getId_vehicle() {
		return id_vehicle;
	}
	public void setId_vehicle(int id_vehicle) {
		this.id_vehicle = id_vehicle;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public UserDetail getUser() {
		return user;
	}
	public void setUser(UserDetail user) {
		this.user = user;
	}
	
}

następnie w servlecie :

Vehicle vehicle = new Vehicle();
		vehicle.setName("Opel");
		
		Vehicle vehicle2 = new Vehicle();
		vehicle2.setName("Nissan");
		
		UserDetail userek = new UserDetail();
		userek.setName("User Name");
		userek.getVehicle().add(vehicle);
		userek.getVehicle().add(vehicle2);
		

		Configuration configuration = new Configuration();
		ServiceRegistry serviceRegistry;

		configuration.configure();

		serviceRegistry = new ServiceRegistryBuilder().applySettings(
				configuration.getProperties()).buildServiceRegistry();
		SessionFactory sessionFactory = configuration
				.buildSessionFactory(serviceRegistry);
		Session session = sessionFactory.openSession();

		session.beginTransaction();
		session.persist(userek);
		session.getTransaction().commit();

		session.close();

zapisują mi się dane z jednym problemem, w tabeli z samochodami, pojazdy nie mają przypisanych kluczy obcych, kolumna ta zostaje pusta

0

Bo nie przypisujesz do samochodów jego użytkowników - tak jak to robisz z użytkownikami. Do użytkownika dodajesz samochody i one są ok, ale do samochodów nie dodajesz użytkowników więc klucze obce są puste.
Ja się domyślam, że deklarując relacje 1-n i n-1 uważałeś że tak trzeba i to opisuje jedną relacje. Mogłoby się tak wydawać, ale jest to błąd. W rzeczywistości tworzysz 2 relacje. Jedną zapewniasz, drugą pozostawiasz pustą.
Dodatkowo powinna istnieć dodatkowa encja korelująca użytkownika z samochodem. Tworzy Ci się taka w bazie ?

Patrz jeżeli utworzysz User 1 -n vehicle, utworzona powinna zostać dodatkowa relacja, bo nie ma możliwości wpisać do Usera n kluczy obcych(id pojazdów np)
Jeżeli utworzysz natomiast Vehicle n - 1 User wtedy do każdego vehicle będzie można wstawić JEDEN id użytkownika.

Ty zapewne zakładasz, że jest pula użytkowników i pojazdów. Jeżeli ludek może jeździć kilkoma samochodami, to wówczas potrzebna relacja 1 -n lub n-n. Obie skutkują utworzeniem dodatkowej tabeli wiążącej

0

Rzeczywiście zapomniałem przypisać do samochodów userów. Natomiast co do nowej tabeli w bazie, to nie tworzy się ona ponieważ mam przy adnotacji @OneToMamy parametr mappedBy przez co tworzy mi się klucz obcy w tabeli z samochodami a tworzenie nowej tabeli zostaje porzucone.

Dzięki za pokazanie błędu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1