0

我有三个类,一个是 USER,第二个是 Vehicle,第三个是 notfound_test。
在 USER 类中,我将车辆声明为 Collection,如下所示。
收集车辆=新的 ArrayList();
并且也有它的获取者和设置者。
所以,我的问题是如何从我正在使用休眠的数据库中检索数据?
我尝试了以下代码。
我无法在第三类车辆的 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();

}

}
4

1 回答 1

0

与往常一样,您忘记了 OneToMany 上的 mappedBy 注释。这是一个双向 OneToMany 关联,因此一侧必须是多侧的反面,如文档中所述

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

我还将字段重命名为vehicles,因为它是一个集合,因此包含多个。

编辑:

您的评论显示打印了 2 辆车:

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

如果您希望打印它们的方式与 dafult 方式不同,则需要覆盖toString()车辆中的方法,就像任何 Java 对象一样。

于 2013-07-12T14:29:59.243 回答