Java Hibernate-使用多对一注释从多表中获取数据
我有3张桌子,大概是: 汽车Java Hibernate-使用多对一注释从多表中获取数据,java,hibernate,oracle11g,Java,Hibernate,Oracle11g,我有3张桌子,大概是: 汽车 carid|carname|carPrice| 100|bmw|10L| 200|honda|5L| .. .. carType carTypeid|Type| 1|suv| 2|xuv| 3|sedan| carconfig carid|carTypeid| 100|3| 200|3| 我有所有3个表的实体 下面我粘贴了连接表的代码carconfig: @Entity @Table(name = "CARCONFIG", uniqueConstraints
carid|carname|carPrice|
100|bmw|10L|
200|honda|5L|
..
..
carType
carTypeid|Type|
1|suv|
2|xuv|
3|sedan|
carconfig
carid|carTypeid|
100|3|
200|3|
我有所有3个表的实体
下面我粘贴了连接表的代码carconfig:
@Entity
@Table(name = "CARCONFIG", uniqueConstraints = {
@UniqueConstraint(columnNames = { "carId" } )
})
public class Carconfig {
@Id
long carId;
@OneToOne
@JoinColumn(name = "carId", insertable = false, updatable = false)
Car car;
@ManyToOne(optional = false)
@JoinColumn(name = "carTypeId")
CarType carType;
public Carconfig() {
super();
}
public Carconfig(long carId, CarType carType) {
super();
this.carType = carType;
this.carId = carId;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public CarType getCarType() {
return carType;
}
public void setCarType(CarType carType) {
this.carType = carType;
}
public long getCarId() {
return carId;
}
public void setCarId(long carId) {
this.carId = carId;
}
}
我的问题是:
我想知道如何从表car和carType中获取数据并将其写入csv
下面是获取数据的代码
public String downloadcars(CarForm form, Model model,HttpServletRequest request, HttpServletResponse response)throws IOException {
PrintWriter pw = null;
try {
logger.debug("+++++++++++++++++++++++++++++++++++++++");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition","attachment; filename=car" + ".csv");
response.setHeader("Expires", "0");
response.setHeader("Cache-Control","must-revalidate, post-csheck=0, pre-check=0");
response.setHeader("Pragma", "public");
pw = response.getWriter();
// Get, Write and flush the data.
pw.println(" Id,Name,Price,Type");
List<car> carFromDB = Collections.emptyList();
for (Car car : carFromDB) {
pw.println(String.format("%s,%s,%s,%s,%s",
// this is where i need help
}
pw.flush();
} catch (Exception ex) {
logger.error("Error while downloading car", ex);
model.addAttribute("failureMsg","Error while downloading cars");
}
return null;
}
publicstringdownloadcars(CarForm表单、模型模型、HttpServletRequest请求、HttpServletResponse响应)抛出IOException{
PrintWriter pw=null;
试一试{
logger.debug(“+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++”;
response.setContentType(“application/vnd.ms excel”);
setHeader(“内容处置”、“附件;文件名=car”+”.csv”);
response.setHeader(“Expires”、“0”);
setHeader(“缓存控制”,“必须重新验证,后csheck=0,预检查=0”);
响应。setHeader(“Pragma”、“public”);
pw=response.getWriter();
//获取、写入和刷新数据。
打印号(“Id、名称、价格、类型”);
List carFromDB=Collections.emptyList();
对于(Car-Car:carFromDB){
println(String.format(“%s,%s,%s,%s,%s”,
//这就是我需要帮助的地方
}
pw.flush();
}捕获(例外情况除外){
logger.error(“下载汽车时出错”,例如);
model.addAttribute(“failureMsg”,“下载汽车时出错”);
}
返回null;
}
您只需使用带有连接查询的HQL即可,如下所示:
List<Object[]> carsWithDetails = session.createQuery(
"select distinct car.carid, car.carname, car.carPrice, cartype.Type " +
"from Car car join car.carType cartype ")
.list();
List<Object[]> carsWithDetails = session.createQuery(
"select distinct car.carid, car.carname, car.carPrice, cartype.Type " +
"from Car car join car.carType cartype join car.carConfig carConfig")
.list();
当然,根据需要更改循环,添加要写入CSV
的代码,而不是System.out.println
行
它将替换此循环:
for (Car car : carFromDB) {
pw.println(String.format("%s,%s,%s,%s,%s",
// this is where i need help
}
编辑:
如果要联接所有三个表,只需向查询中添加联接引用join car.carConfig carConfig
,如下所示:
List<Object[]> carsWithDetails = session.createQuery(
"select distinct car.carid, car.carname, car.carPrice, cartype.Type " +
"from Car car join car.carType cartype ")
.list();
List<Object[]> carsWithDetails = session.createQuery(
"select distinct car.carid, car.carname, car.carPrice, cartype.Type " +
"from Car car join car.carType cartype join car.carConfig carConfig")
.list();
List carsWithDetails=session.createQuery(
选择不同的car.carid、car.carname、car.carPrice、cartype.Type+
“从Car Car join Car.carType carType join Car.carConfig carConfig”)
.list();
获取数据的代码在哪里?。有问题的是,没有一行显示获取数据。你可以使用标准API
或HQL从数据库获取数据,你可以使用Apache POI
创建csv/excel文件。你能解释一下你使用的HQL吗?我是HQL的新手,不太明白我的意思t、 对于出现的问题,我们深表歉意。在下面的查询中,我们对一些列使用了select,这些列的别名为car
forcar
class和carType
forcarType
,并在两个表之间使用了join
。明白了!但是,您能展示一下我能不能将所有3个表car carType和carconfig连接起来吗?谢谢非常感谢!