Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA@NamedQuery有两个表,可能吗?_Java_Jpa_Named Query - Fatal编程技术网

Java JPA@NamedQuery有两个表,可能吗?

Java JPA@NamedQuery有两个表,可能吗?,java,jpa,named-query,Java,Jpa,Named Query,我有一个虚拟问题,我需要做一个@NamedQuery与其他表连接,一些简单的事情 但是在我所有的@NamedQuery中,我只处理映射的对象/表 例如,在“我的对象/表”映射的汽车中: 我正在尝试使用:@SecondaryTables,但目前没有成功 另一个有效的方法是将其他表中的所有内容作为参数提供,但我认为这在性能上并不好 比如: 有什么建议吗 提前感谢命名查询可以使用API查询可以使用的一切,因此可以明确地执行子查询。JPA的哪种实现?命名查询可以使用API查询可以使用的任何东西,因此可以

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

但是在我所有的
@NamedQuery
中,我只处理映射的对象/表

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

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

另一个有效的方法是将其他表中的所有内容作为参数提供,但我认为这在性能上并不好

比如:

有什么建议吗


提前感谢

命名查询可以使用API查询可以使用的一切,因此可以明确地执行子查询。JPA的哪种实现?

命名查询可以使用API查询可以使用的任何东西,因此可以明确地执行子查询。JPA的哪种实现?

您试图做的不是加入。这是一个次级选择。就性能而言,它与事先获得参数一样有效

但是,如果您坚持使用subselect,那么JPA查询语言将支持它。因为它支持连接。
(7.11.8.11.子查询)。

您试图做的不是加入。这是一个次级选择。就性能而言,它与事先获得参数一样有效

但是,如果您坚持使用subselect,那么JPA查询语言将支持它。因为它支持连接。
(在7.11.8.11.子查询中)。

我猜您有这样的情况:

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

@Entity
public class CarStatus{
    private String status;
    private String color;
    //... something else
}
query = "select c.id from Cars c join CarStatus d where c.status = d.status and d.color = 'red'"
如果是的话,改变这个

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

@Entity
public class CarStatus{
    private String color;
    //... something else
}
如果我错了,表不应该以这种方式关联,那么您应该更改查询,使用联接而不是子查询。大概是这样的:

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

@Entity
public class CarStatus{
    private String status;
    private String color;
    //... something else
}
query = "select c.id from Cars c join CarStatus d where c.status = d.status and d.color = 'red'"

我猜你有这样的想法:

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

@Entity
public class CarStatus{
    private String status;
    private String color;
    //... something else
}
query = "select c.id from Cars c join CarStatus d where c.status = d.status and d.color = 'red'"
如果是的话,改变这个

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

@Entity
public class CarStatus{
    private String color;
    //... something else
}
如果我错了,表不应该以这种方式关联,那么您应该更改查询,使用联接而不是子查询。大概是这样的:

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

@Entity
public class CarStatus{
    private String status;
    private String color;
    //... something else
}
query = "select c.id from Cars c join CarStatus d where c.status = d.status and d.color = 'red'"

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

@Column(table=“SECONDARY\u table”,name=“EXAMPLE\u Column\u name”)

私有字符串示例

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

@Column(table=“SECONDARY\u table”,name=“EXAMPLE\u Column\u name”)

私有字符串示例

除非您可以使用继承、@SecondaryTable或映射(@OneToOne,…)将对象映射到第二个表,否则您必须使用@namedNativeRequesty。为了进一步帮助您,我需要更多地了解表结构以及您使用的JPA提供程序(例如EclipseLink具有可以实现这一点的扩展,它允许您使用存储过程(@NamedStoredProcedureQuery))。查询有什么问题?汽车和汽车是如何定义和映射的<代码>d。颜色=红色
无效
d.color='red'
可能是正确的。除非您可以使用继承、@SecondaryTable或映射(@OneToOne,…)将对象映射到第二个表,否则您必须使用@namednaviequiry。为了进一步帮助您,我需要更多地了解表结构以及您使用的JPA提供程序(例如EclipseLink具有可以实现这一点的扩展,它允许您使用存储过程(@NamedStoredProcedureQuery))。查询有什么问题?汽车和汽车是如何定义和映射的<代码>d。颜色=红色
无效
d.color='red'
可能是正确的。