Hibernate查询未映射表上的内连接(单向)

时间:2011-10-26 12:32:10

标签: java hibernate hql

我确实遇到了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;
    //..
}

2 个答案:

答案 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)

我看到了这个问题,想要更新它。我做错了。我可以简单地查询汽车并返回这辆车内的所有库存。因为汽车与库存之间存在关系,而不是相反。因此,查询特定的汽车,只需返回库存清单属性为我做的...