几天来,我一直在为一个命名查询苦苦挣扎。命名查询具有与第二个表的内部联接。另一个复杂性是,第二个表上的主键是复合键。我在这里简化了两张表:
Table: aname
nameIdx number(9),
firstName varchar2(40),
lastName varchar2(40),
主键是nameIdx
Table: aname_role
nameIdx number(9), --foreign key to name table
nameType char(2),
inactiveFlag char(1)
复合主键位于nameIdx和nameType上
我试图在JPQL中模拟以下sql查询:
select * from aname n
left join aname_role nr on n.nameidx=nr.nameidx
where nr.nametype='5'
and nr.inactiveflag='N';
此查询在Oracle中按预期工作,返回许多记录。Java我有这些JPA实体:
@Entity
@Table(name="ANAME")
@NamedQueries({
@NamedQuery(name = "AName.findActiveSalesPersons", query = "SELECT a FROM AName a LEFT JOIN a.aNameRoleList r WHERE r.inactiveflag='N' and r.ANameRolePK.nametype='5' ")})
public class AName implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "NAMEIDX")
private Integer nameidx;
@Column(name = "FIRSTNAME")
private String firstname;
@Column(name = "LASTNAME")
private String lastname;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "aName")
private List<ANameRole> aNameRoleList;
//getters and setters here
和
@Entity
@Table(name = "ANAME_ROLE")
public class ANameRole implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected ANameRolePK aNameRolePK;
@Basic(optional = false)
@NotNull
@Column(name = "INACTIVEFLAG")
private Character inactiveflag;
@JoinColumn(name = "NAMEIDX", referencedColumnName = "NAMEIDX", insertable = false, updatable = false)
@ManyToOne(optional = false)
private AName aName;
//getters and setters here
还有一个主键类ANameRolePK
@Embeddable
public class ANameRolePK implements Serializable {
@Basic(optional = false)
@NotNull
@Column(name = "NAMEIDX")
private int nameidx;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 2)
@Column(name = "NAMETYPE")
private String nametype;
//getters and setters here
使用此设置,包括在上面的AName实体中指定的命名查询,下面将返回一个空的结果列表:
em.createNamedQuery("AName.findActiveSalesPersons").getResultList();
有人能指出我在这个命名查询中做错了什么吗?
SELECT a FROM AName a LEFT JOIN a.aNameRoleList r WHERE r.inactiveflag='N' and r.aNameRolePK.nametype='5'
谢谢,
史蒂夫
经过更多的测试,我意识到连接正在工作,但不是“r. aNameRolePK. nametype='5'”。但是如果我将其更改为“r. aNameRolePK. nameidx=1”,它就可以工作了。所以,这只是名称类型字段,我们将其定义为数据库中的char(2)。问题在于char字段中的空格,这里讨论了:JavaNamedQuery字符串问题。解决这个问题的推荐方法似乎是实现Eclipse Link SessionCustomizer。为了测试,我将命名查询更改为
SELECT a
FROM AName a LEFT JOIN a.aNameRoleList r
WHERE r.inactiveflag='N' and trim(trailing from r.aNameRolePK.nametype)=5
这将返回预期的记录。
默认情况下,至少使用Hibernate,默认获取类型是Lazy
,因此您需要执行加入获取
而不是加入
。此外,您应该有选择不同的
。尝试:
SELECT distinct a FROM AName a LEFT JOIN fetch a.aNameRoleList r WHERE r.inactiveflag='N' and r.aNameRolePK.nametype='5'
引用:Hibernate中一对一、多对一和一对多的默认获取类型
我想返回每个行,并为和提供空值,如果它们没有。当我执行此查询时,我得到空结果。如果我使用而不是,我得到不正确的结果。如何过滤左连接,以便如果没有匹配,我仍然得到返回的p行与和的空值? 注:我在末尾添加了,仅用于测试目的。
有人能告诉我为什么列表返回空吗?我的xpath是准确的,因为我重新检查了它,但我仍然无法迭代它,而调试for循环甚至没有执行。我不确定我哪里出了问题。
这个问题是jOOQ的扩展:在单个对象中返回带有join、groupby和count的列表,但现在返回的是三个对象,而不是两个。 主意 具体示例 如何从查询中获取结果?
问题内容: 我正在尝试编写一个用于与last.fm API进行交互的小脚本。 我有一点使用的经验,但是以前使用它的方式似乎无效,而是返回一个空列表。 我删除了API密钥,因为我不知道它到底应该有多私密,并举了一个示例,说明了我在该位置接收的XML。 与API交互的类: 调用的get_now_playing方法: 我收到的xml样本: 问题答案: 问题在于, 如果给定标签名称,则仅搜索元素的直接后代
我试图用刮擦和飞溅来刮取衣服的图像和一些产品信息。我想得到的形象,只有产品(所以没有模型)。比如这张照片https://www2.hm.com/nl_nl/productpage.0220094001.html 然而,如果我试图让src在Scrapy shell中 回答xpath('//figure[包含(@class,“secondary”)]///img//@src')。摘录() 返回一个空列
问题内容: 我们看到的情况是,我们的数据库连接由于套接字写入错误而终止: 当然,所有随后的写入连接的尝试都会失败: 在更新代码以捕获此类异常并在发生连接时请求新连接后,该连接再次失败。我是否怀疑每次调用实际上都不在提供新的连接?难道不只是重用已关闭的现有连接吗? 如果我是正确的,那么丢弃旧的连接并请求新的连接的正确方法是什么? 编辑:这是我想知道的更简洁的版本: “ c1 == c2”是正确的说法