我开始在JPA2.1中使用新的实体图特性来指定必须加载的惰性集合。考虑以下课程:
@Entity
@NamedQueries({
@NamedQuery(name="findWithFilterAttr","select a from A a where a.filterAttribute like :filter")
})
@NamedEntityGraphs({
@NamedEntityGraph(name = "graph.childs", attributeNodes = @NamedAttributeNode("childs"))})
public class A{
@Id
private long id;
@OneToMany(mappedBy="parent")
private List<B> childs;
private String filterAttribute;
}
@Entity
public class B{
@Id
private long id;
@ManyToOne
private A parent;
}
当我执行命名查询以获得实体图提示下的实体列表时,我会得到一个包含重复实体的集合。如何仅加载一次A实体。
我正在使用:
一个小小的补充。
我和你有同样的问题。我认为这种行为是意想不到的,可能是Hibernate中的一个缺陷。不应该需要指定不同的,因为JPQL查询中直接指定的读取就是这种情况。
由于实现的局限性,您的解决方案相当于一种变通方法。通过检查代码(方法list()
中的needsDistincing
标志的计算,可从grepcode获得),有两种解决方案:
我终于解决了这个问题,我在命名查询中添加了DISTINCT,现在一切都正常了。。。。导致此错误的原因是,当JPA提供程序找到实体图提示时,它会创建一个与子表的左联接。没有实体图的原始查询:
11:55:28,950 INFO [stdout] (default task-23) Hibernate:
11:55:28,950 INFO [stdout] (default task-23) select
11:55:28,951 INFO [stdout] (default task-23) entitya0_.id as id1_0_0_,
11:55:28,951 INFO [stdout] (default task-23) childs1_.id as id1_1_1_,
11:55:28,951 INFO [stdout] (default task-23) entitya0_.filter as filter2_0_0_,
11:55:28,951 INFO [stdout] (default task-23) childs1_.parent_id as parent_i2_1_1_,
11:55:28,951 INFO [stdout] (default task-23) childs1_.parent_id as parent_i2_0_0__,
11:55:28,951 INFO [stdout] (default task-23) childs1_.id as id1_1_0__
11:55:28,951 INFO [stdout] (default task-23) from
11:55:28,951 INFO [stdout] (default task-23) EntityA entitya0_
11:55:28,951 INFO [stdout] (default task-23) left outer join
11:55:28,952 INFO [stdout] (default task-23) EntityB childs1_
11:55:28,952 INFO [stdout] (default task-23) on entitya0_.id=childs1_.parent_id
11:55:28,952 INFO [stdout] (default task-23) where
11:55:28,952 INFO [stdout] (default task-23) entitya0_.filter like ?
使用独特和实体图进行查询:
11:57:25,051 INFO [stdout] (default task-24) Hibernate:
11:57:25,052 INFO [stdout] (default task-24) select
11:57:25,052 INFO [stdout] (default task-24) distinct entitya0_.id as id1_0_0_,
11:57:25,052 INFO [stdout] (default task-24) childs1_.id as id1_1_1_,
11:57:25,052 INFO [stdout] (default task-24) entitya0_.filter as filter2_0_0_,
11:57:25,052 INFO [stdout] (default task-24) childs1_.parent_id as parent_i2_1_1_,
11:57:25,052 INFO [stdout] (default task-24) childs1_.parent_id as parent_i2_0_0__,
11:57:25,052 INFO [stdout] (default task-24) childs1_.id as id1_1_0__
11:57:25,052 INFO [stdout] (default task-24) from
11:57:25,052 INFO [stdout] (default task-24) EntityA entitya0_
11:57:25,052 INFO [stdout] (default task-24) left outer join
11:57:25,052 INFO [stdout] (default task-24) EntityB childs1_
11:57:25,052 INFO [stdout] (default task-24) on entitya0_.id=childs1_.parent_id
11:57:25,052 INFO [stdout] (default task-24) where
11:57:25,052 INFO [stdout] (default task-24) entitya0_.filter like ?
这是我的合约代码。在这里,我试图存储特定行程的坐标。虽然存储信息合约执行良好。但是当我检索数据时,它应该给出坐标数组。但它抛出了一个错误。 原因:'uint256类型的数据不足' 我在这里错过了什么。有没有其他方法来实现我在这里尝试的? 附言:我是固体新手。
我正在尝试使用废料并遇到一些问题。问题是我的脚本返回重复的结果。我正在尝试从父页面抓取URL,并按照每个单独的URL获取关联的日期。抓取每个嵌套的URL后,它似乎会再次从父页面输出URL列表。 下面是脚本: 下面是 json 输出: 重申一下,我很难从父页面输出一个url列表,从每个单独的嵌套URL输出一个相应的日期列表。我是scrapy和python的新手,所以希望有人能给我指出正确的方向。
我试图用这个php脚本创建一个更改密码页面。我希望能够告诉用户他们是否输入了正确的用户名和密码,以便进行更改。当我检查行时,无论它是否返回行,我总是得到以下错误: 警告:mysqli_num_rows()要求参数1为mysqli_结果,给定布尔值 这是我的代码: 注意:我确实在手之前建立了一个连接,只是似乎没有必要在这里进行连接。此外,如果我输入了正确的信息,它将根据需要更改密码,但仍会显示错误消
我有一个有82,535行的表,其中65,087行按ID是唯一的。当我拉取整个结果集82,535并复制到Excel并删除重复项时,它显示有17,448个重复项。但是当我使用下面的查询时,我得到了不同的结果: 此查询返回值17364 我确定唯一的的数目是65,087
我已经在Python中通过,它们看起来都非常相似。为什么?如何随机化它们?
问题内容: 我相信这是一件非常简单的事情,我发誓我以前做过,但是我不记得怎么做。 假设我有一对多的关系。我想加入两个表,但不允许左侧表重复。 SQLFIDDLE 因此,根据上述SQLFiddle,我的结果将是: 我希望它是: 我的理由是,通过这种方式,我可以轻松地遍历结果,而无需使用PHP进行任何进一步处理。 问题答案: 您可以将值替换为以下内容: 参见带有演示的SQL Fiddle 结果是: