0

我有一种虚拟问题,我需要@NamedQuery与其他表连接,一些简单的事情。

但总的来说,我@NamedQuery只处理我的映射对象/表。

例如在我的对象/表映射汽车中:

@NamedQuery(name = Cars.GET_AVAILABLE_CARS, 
    query = "select c.id from Cars c where c.status = (select d.status from CarStatus d where d.color=red)")

我正在尝试使用:@SecondaryTables但目前没有成功。

另一件有效的事情是将其他表中的所有内容作为参数提供,但我认为这在性能上不会有好处。

喜欢:

@NamedQuery(name = Cars.GET_AVAILABLE_CARS, query = 
     "select c.id from Cars c where c.status = :" + CarStatusParam)

有小费吗?

提前致谢

4

4 回答 4

2

命名查询可以使用 API 查询可以使用的所有内容,因此可以清楚地执行子查询。JPA 的哪个实现?

于 2009-12-22T14:12:27.140 回答
1

你想要做的不是加入。它是一个子选择。就性能而言,它与事先获取参数一样(低)效率。

但是,如果您坚持使用子选择,JPA 查询语言支持它。因为它支持连接。 看看这里(在7.11 8.11 。子查询)。

于 2009-12-23T17:24:41.467 回答
1

我猜你有这样的事情:

@Entity
public class Cars{
    private String status;
    //... something else
}

@Entity
public class CarStatus{
    private String status;
    private String color;
    //... something else
}

如果是这样,改变这个

@Entity
public class Cars{
    private CarStatus status;  //<--THIS!!
    //... something else
}

@Entity
public class CarStatus{
    private String color;
    //... something else
}

然后将您的 NamedQuery 更新为此:

query ="select c.id from Cars c where c.status.color = 'red'" 

如果我错了并且表不应该以这种方式相关,那么您应该更改您的查询,使用联接而不是子查询。像这样的东西:

query = "select c.id from Cars c join CarStatus d where c.status = d.status and d.color = 'red'"
于 2012-08-26T04:20:08.760 回答
-1

答案是肯定的,这是可能的。您需要确保您的列定义了要查看的表。请参阅下面的代码,您命名的查询应该在添加后工作。

@Column(table = "SECONDARY_TABLE", name = "EXAMPLE_COLUMN_NAME") private String example;

于 2018-12-13T00:25:17.083 回答