Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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

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查询从onetomany连接获取_Java_Jpa - Fatal编程技术网

Java jpa查询从onetomany连接获取

Java jpa查询从onetomany连接获取,java,jpa,Java,Jpa,我有以下两个类使用JTA事务类型和openjpa&a derby嵌入式数据库。我想要的是在一个查询中获得上级组织&请求的WSpace,而我只有WSpace id。我对JPA来说是个新手,所以我边走边学习,一直在努力处理“q2”查询。我一直在使用查询“q0”和“q1”来调试和检查数据库中是否存在项q0'和'q1'一样返回1个对象,而'q2'返回0个对象 我尝试了各种实体设置和不同的查询,但都没有成功 最初,WSpace类没有Organization字段,因为它似乎不需要持久化或选择,但我添加了它(

我有以下两个类使用JTA事务类型和openjpa&a derby嵌入式数据库。我想要的是在一个查询中获得上级组织&请求的WSpace,而我只有WSpace id。我对JPA来说是个新手,所以我边走边学习,一直在努力处理“q2”查询。我一直在使用查询“q0”和“q1”来调试和检查数据库中是否存在项q0'和'q1'一样返回1个对象,而'q2'返回0个对象

我尝试了各种实体设置和不同的查询,但都没有成功

最初,WSpace类没有Organization字段,因为它似乎不需要持久化或选择,但我添加了它(连同mappedby参数),以防查询需要它,但没有任何更改

回到最初的问题,我如何才能让它工作,使它返回父对象和被请求的单个子对象

SELECT o FROM Organisation o JOIN FETCH o.spaces w WHERE w.id = :id
这是我的课

@Entity
public class Organisation implements MyObjects
{
    @Id
    @NotNull
    private Integer id;
    private String name;
    @OneToMany( mappedBy = "organisation",
        cascade = { CascadeType.PERSIST, CascadeType.MERGE } )
    private List<WSpace> spaces;

    //getters/setter below
}

And

@Entity
public class WSpace implements MyObjects
{
    @Id
    @NotNull
    private Integer id;
    private String name;
    @ManyToOne
    private Organisation organisation;
    @OneToMany
    private List<Application> apps;

    //getters/setter below
}

class DAO
{
    ...

    public void foo( Integer id )
    {
        ....
        String q0 = "SELECT o FROM Organisation o WHERE o.id = 49068";
        List<Organisation> res0 = em.createQuery( q0, Organisation.class ).getResultList();
        String q1 = "SELECT w FROM WSpace w WHERE w.id = " + id;
        List<WSpace> res1 = em.createQuery( q1, WSpace.class ).getResultList();
        String q2 = "SELECT o FROM Organisation o "
                + "JOIN FETCH o.spaces w WHERE w.id = " + id;
        List<Organisation> res2 = em.createQuery( q2, Organisation.class ).getResultList();
        ...
    }
}
@实体
公共类组织实现MyObject
{
@身份证
@NotNull
私有整数id;
私有字符串名称;
@OneToMany(mappedBy=“组织”,
cascade={CascadeType.PERSIST,CascadeType.MERGE})
私有列表空间;
//下面是getter/setter
}
及
@实体
公共类WSpace实现MyObjects
{
@身份证
@NotNull
私有整数id;
私有字符串名称;
@许多酮
私人机构;
@独身癖
私人列表应用程序;
//下面是getter/setter
}
类刀
{
...
公共void foo(整数id)
{
....
字符串q0=“从组织中选择o,其中o.id=49068”;
List res0=em.createQuery(q0,organization.class).getResultList();
String q1=“从WSpace w中选择w,其中w.id=“+id;
List res1=em.createQuery(q1,WSpace.class).getResultList();
字符串q2=“从组织中选择o”
+“JOIN FETCH o.spaces w其中w.id=“+id;
List res2=em.createQuery(q2,Organization.class).getResultList();
...
}
}

您是否尝试在日志中查找第二季度查询的输出? 我也在学习JPA,最近正在处理标准和QL查询。 因此,在遇到与连接类似的问题后,我开始检查日志,问题很清楚,因为日志被转换为SQL查询。 另一个问题是,您是如何生成实体的?我使用Netbeans为我生成它。此外,多对多关系可能也没有生成帮助器类,我在一个项目中看到了它。
希望有帮助。

您是否尝试在日志中查找第二季度查询的输出? 我也在学习JPA,最近正在处理标准和QL查询。 因此,在遇到与连接类似的问题后,我开始检查日志,问题很清楚,因为日志被转换为SQL查询。 另一个问题是,您是如何生成实体的?我使用Netbeans为我生成它。此外,多对多关系可能也没有生成帮助器类,我在一个项目中看到了它。
希望有帮助。

您要查找的查询可能是:

SELECT w FROM WSpace w LEFT JOIN FETCH w.organisation where w.id=:id

使用
query.setParameter(“id”,id)
将id参数绑定到查询。这有效地告诉持久性提供程序在同一查询中查询
WSpace
实体时获取
WSpace.organization
关系。使用
LEFT[OUTER]
keword(
OUTER
可选)在
JOIN FETCH
关键字前面,告诉您的持久性提供者选择
WSpace
对象,即使您的
WSpace.organization
关系没有匹配的
organization
记录。

您要查找的查询可能是:

SELECT w FROM WSpace w LEFT JOIN FETCH w.organisation where w.id=:id

使用
query.setParameter(“id”,id)
将id参数绑定到查询。这有效地告诉持久性提供程序在同一查询中查询
WSpace
实体时获取
WSpace.organization
关系。使用
JOIN FETCH
关键字前面的
LEFT[OUTER]
keword(
OUTER
可选)告诉持久性提供者选择
WSpace
对象,即使您的
WSpace.organization
关系没有匹配的
organization
记录。

使用@JoinColumn(“column\u name”)在@ManyToOne下,我还尝试删除了ManyToOne back referece,并使用了一个仍然返回0的JoinTable。我开始怀疑这是不可能的,因为现在我只想保留ManyToOne back引用并调用
SELECT w FROM WSpace w其中w.id=:id
从WSpace获取组织。在@ManyToOne下使用@JoinColumn(“column_name”)没有什么区别,我还尝试删除了manytone back referece,并使用了一个仍然返回0的JoinTable。我开始怀疑这是不可能的,因为现在我只想保留manytone back引用并调用
SELECT w FROM WSpace w WHERE w.id=:id
从WSpace获取组织。日志存储在哪里?没有任何东西被推到命令行?在我的例子中,我对所有CRUD方法进行了单元测试,所以JPA发出的SQL查询被输出到控制台(如果我没有弄错的话,或者输出到Glassfish服务器日志中)。在您的例子中,您可以查看这篇文章或这篇文章,以便登录IDE输出窗口。日志存储在哪里?没有任何东西被推到命令行?在我的例子中,我对所有CRUD方法都进行了单元测试,所以JPA发出的SQL查询被输出到控制台(如果我没有弄错的话,或者输出到Glassfish服务器日志中)。在您的例子中,您可以查看这篇文章或这篇文章,以便登录到IDE输出窗口