Java 使用getter和setter从数据库检索集合类型的数据

Java 使用getter和setter从数据库检索集合类型的数据,java,hibernate,Java,Hibernate,我有三个等级一个是用户,第二个是车辆,第三个是未找到的测试。 在用户类别i中,宣布车辆为集合,如下所示。 收集车辆=新阵列列表() 也有它的接受者和接受者。 所以,我的问题是如何从使用hibernate的数据库中检索数据? 我尝试了以下代码。 我无法在三等车的JOPTIONPANE中获取数据。我需要相关数据 package org.notfound.annotation; import java.util.ArrayList; import java.util.Collection; imp

我有三个等级一个是用户,第二个是车辆,第三个是未找到的测试。
在用户类别i中,宣布车辆为集合,如下所示。
收集车辆=新阵列列表()
也有它的接受者和接受者。
所以,我的问题是如何从使用hibernate的数据库中检索数据?
我尝试了以下代码。
我无法在三等车的JOPTIONPANE中获取数据。我需要相关数据

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();

}

}
package org.notfound.annotation;
导入java.util.ArrayList;
导入java.util.Collection;
导入javax.persistence.Entity;
导入javax.persistence.GeneratedValue;
导入javax.persistence.Id;
导入javax.persistence.OneToMany;
@实体
公共类用户{
@Id@GeneratedValue
私有int-id;
私有字符串名称;
@独身癖
收集车辆=新阵列列表();
公众收集车辆(){
返回车辆;
}
公共车辆(收集车){
本车=车辆;
}
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
}
包org.notfound.annotation;
导入javax.persistence.Entity;
导入javax.persistence.GeneratedValue;
导入javax.persistence.Id;
导入javax.persistence.manytone;
@实体
公车{
@Id@GeneratedValue
私家车识别码;
私有字符串车辆名称;
@许多酮
私有用户=新用户();
公共用户getUser(){
返回用户;
}
公共void setUser(用户){
this.user=用户;
}
public int getVehicle_id(){
归还车辆标识;
}
公共车辆id(内部车辆id){
this.vehicle\u id=车辆id;
}
公共字符串getVehicle_name(){
返回车辆名称;
}
公共无效设置车辆名称(字符串车辆名称){
this.vehicle\u name=车辆名称;
}
}
包org.notfound.annotation;
导入javax.swing.JOptionPane;
导入org.hibernate.Session;
导入org.hibernate.SessionFactory;
导入org.hibernate.cfg.Configuration;
公共类未找到\u测试{
公共静态void main(字符串[]args){
用户=新用户();
车辆=新车();
车辆2=新车();
user.setName(“NIRAV J.KAMANI”);
车辆。设置车辆名称(“雪佛兰克鲁兹”);
车辆2.设置车辆名称(“MARUTI ERTIGA”);
vehicle.setUser(用户);
车辆2.设置用户(用户);
user.getVehicle().add(车辆);
user.getVehicle().add(vehicle2);
SessionFactory SessionFactory=新配置().configure().buildSessionFactory();
Session Session=sessionfactory.openSession();
/*session.beginTransaction();
session.save(用户);
会话.保存(车辆);
会话.保存(车辆2);
session.getTransaction().commit();
session.close()*/
session.beginTransaction();
user=(user)session.get(user.class,1);
vehicle=(vehicle)会话.get(vehicle.class,1);
vehicle2=(车辆)会话.get(车辆.class,2);
JOptionPane.showMessageDialog(null,user.getId()+“”+user.getName()+“”+user.getVehicle().toString(),“信息”,JOptionPane.INFORMATION_消息);
session.close();
}
}

一如既往,您忘记了OneToMany上的mappedBy注释。这是一种双向的一对一关联,因此,单侧必须是多侧的反向侧,如下所述:


如果您希望打印它们的方式与DAFLUT方式不同,则需要重写vehicle中的
toString()
方法,就像对任何Java对象一样。

那么,问题出在哪里。这个代码是做什么的?JOptionPane中显示了什么?我得到了以下信息。1 NIRAV J.KAMANI[org.notfound.annotation。Vehicle@37ed25,org.notfound.annotation。Vehicle@aec63]请参见对我答案的编辑。无法理解…,它必须打印雪佛兰cruize和maruti ertiga。。我已经写了tostring(),在你发布的车辆代码中没有tostring()方法。为什么不向我们展示这个方法呢?JoptionPane中的user.getVehicle().toString()您正在对一组车辆调用toString()(请参见为什么最后的s有用?您自己也弄糊涂了)。集合通过输出括号将自身转换为字符串,然后输出它包含的每辆车的
toString()
,用逗号分隔,然后输出结束括号。由于Vehicle没有任何toString()方法,因此使用默认的方法from Object。这是在使用Hibernate之前您应该了解的非常基本的OO内容。您能告诉我我能做什么吗?
@OneToMany(mappedBy = "user")
private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();
[org.notfound.annotation.Vehicle@37ed25, org.notfound.annotation.Vehicle@aec63]
 ^-- first vehicle                       ^-- second vehicle
^-- brackets, indicating that it's a collection ------------------------------^