我确实遇到了spring和hibernate的查询问题。
我有一个名为Car的课程,它将ManyToMany映射到我的课程库存。库存btw没有引用Car类。 这会导致spring和hibernate创建映射表car_loading,其中fk到汽车,fk到库存表。
我现在想查询特殊车辆的库存:
String squery = "SELECT i from Inventory i, car_loading loads WHERE i.id = loads.loading AND car = ?";
但是我得到了例外
org.hibernate.hql.ast.QuerySyntaxException: car_loading is not mapped
仅供参考:Hibernate不支持JOIN ON x.a = y.b导致我这样做......
感谢客栈提前帮忙!
public class Car {
@OneToOne
private Driver driver;
@ManyToMany(cascade=CascadeType.ALL)
private List<Inventory> loading = new ArrayList<Inventory>();
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(pattern="dd:MM:yyy HH:mm")
private Date lastModified;
//...
}
public class Inventory {
private Integer shouldAmount;
private Integer minAmount;
private Integer isAmount;
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(pattern="dd:MM:yyy HH:mm")
private Date lastModified;
//..
}
答案 0 :(得分:0)
你永远不应该明确地使用映射表,当你使用实体的属性时,hibernate会自动添加它。 对于您的情况,查询应如下所示:
"select c.loading from Car c where c = ?"
或者只是获取一个汽车对象Car car = session.get(Car.class, id)
,然后使用getter作为因果Collection<Inventory> loading = car.getLoading();
答案 1 :(得分:0)
我看到了这个问题,想要更新它。我做错了。我可以简单地查询汽车并返回这辆车内的所有库存。因为汽车与库存之间存在关系,而不是相反。因此,查询特定的汽车,只需返回库存清单属性为我做的...