Извлекать данные типа сбора из базы данных с помощью геттеров и сеттеров

У меня есть три класса, один из которых - USER, второй автомобиль и третий - notfound_test. В классе USER я объявлено транспортное средство как Collection, как показано ниже. Collection vehicle = новый ArrayList(); А также имея геттеры и сеттеры. Итак, мой вопрос заключается в том, как я могу получить данные из базы данных, я использую hibernate? Я попробовал следующий код. Я не могу получить данные в JOPTIONPANE OF VEHICLE IN THIRD CLASS. Мне нужны соответствующие данные

package org.notfound.annotation;

import java.util.ArrayList;
import java.util.Collection;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class User {

@Id @GeneratedValue
private int id;
private String name;
@OneToMany
Collection<vehicle> vehicle=new ArrayList<vehicle>();


public Collection<vehicle> getVehicle() {
 return vehicle;
}
public void setVehicle(Collection<vehicle> vehicle) {
 this.vehicle = vehicle;
}
public int getId() {
 return id;
}
public void setId(int id) {
 this.id = id;
}
public String getName() {
 return name;
}
public void setName(String name) {
 this.name = name;
}


}

package org.notfound.annotation;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@Entity
public class Vehicle {

@Id @GeneratedValue
private int vehicle_id;
private String vehicle_name;
@ManyToOne
private User user=new User();



public User getUser() {
 return user;
}
public void setUser(User user) {
 this.user = user;
}
public int getVehicle_id() {
 return vehicle_id;
}
public void setVehicle_id(int vehicle_id) {
 this.vehicle_id = vehicle_id;
}
public String getVehicle_name() {
 return vehicle_name;
}
public void setVehicle_name(String vehicle_name) {
 this.vehicle_name = vehicle_name;
}


}

 package org.notfound.annotation;

 import javax.swing.JOptionPane;

 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
 import org.hibernate.cfg.Configuration;

 public class Notfound_test {


public static void main(String[] args) {

 User user=new User();
 Vehicle vehicle=new Vehicle();
 Vehicle vehicle2=new Vehicle();

 user.setName("NIRAV J. KAMANI");
 vehicle.setVehicle_name("CHEVROLET CRUIZE");
 vehicle2.setVehicle_name("MARUTI ERTIGA");
 vehicle.setUser(user);
 vehicle2.setUser(user);
 user.getVehicle().add(vehicle);
 user.getVehicle().add(vehicle2);

 SessionFactory sessionfactory=new Configuration().configure().buildSessionFactory();
 Session session=sessionfactory.openSession();
 /*session.beginTransaction();
 session.save(user);
 session.save(vehicle);
 session.save(vehicle2);
 session.getTransaction().commit();
 session.close();*/

 session.beginTransaction();
 user=(User) session.get(User.class, 1);
 vehicle=(Vehicle) session.get(Vehicle.class, 1);
 vehicle2=(Vehicle) session.get(Vehicle.class, 2);
 JOptionPane.showMessageDialog(null, user.getId()+" "+user.getName()+" "+user.getVehicle().toString(), "INFORMATION", JOptionPane.INFORMATION_MESSAGE);
 session.close();

}

}
</vehicle></vehicle></vehicle></vehicle>
1 ответ

Как всегда, вы забыли аннотацию mappedBy на OneToMany. Это двунаправленная ассоциация OneToMany, и одна сторона должна быть, таким образом, обратной стороной для многих сторон, как объясняется в документации:

@OneToMany(mappedBy = "user")
private Collection<vehicle> vehicles = new ArrayList<vehicle>();
</vehicle></vehicle>

Я также переименовал поля в vehicles, так как это коллекция и, следовательно, содержит несколько.

РЕДАКТИРОВАТЬ:

Ваш комментарий показывает, что 2 машины печатаются:

[org.notfound.annotation.Vehicle@37ed25, org.notfound.annotation.Vehicle@aec63]
 ^-- first vehicle ^-- second vehicle
^-- brackets, indicating that it a collection ------------------------------^

Если вы хотите, чтобы они были напечатаны, это иначе, чем способ dafult, вам необходимо переопределить метод toString() в автомобиле, как и для любого объекта Java.

licensed under cc by-sa 3.0 with attribution.