我正在寻找一种在jpql查询中强制转换实体的方法。
示例:
@Entity
class Topic {
@OneToMany
List<AbstractMessage> messages;
}
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
abstract class AbstractMessage {
String content;
}
@Entity
class MessageType1 extends AbstractMessage {
String att1;
}
@Entity
class MessageType2 extends AbstractMessage {
Integer att2;
}
我正在尝试收集一个或多个主题的消息类型为MessageType2且att2=1的所有主题。
以下是我对jpql查询的建议:
select t from Topic t left outer join t.messages on (Type(t) = MessageType2)
where t.att2 = 1
我认为这个查询不起作用,因为JPA没有加入MessageType2表。
有没有办法做到这一点,或者我必须进行本机查询?
谢谢
更清洁的解决方案是使用JPA 2.1TREAT
:
SELECT t FROM Topic t JOIN TREAT(t.messages AS MessageType2) m WHERE m.att2 = 1
http://hantsy.blogspot.cz/2013/12/jpa-21-treat.html
您可以模拟CAST:http://en.wikibooks.org/wiki/Java_Persistence/Querying#Joining.2C_querying_on_a_OneToMany_relationship
SELECT t FROM Topic t JOIN t.messages m, MessageType2 y WHERE m = y AND y.att2 = 1
除非通过无界通配符对其进行参数化,否则不允许转换为参数化类型。 Box<Integer> integerBox = new Box<Integer>(); Box<Number> numberBox = new Box<Number>(); //Compiler Error: Cannot cast from Box<Number> to Box<Integer> integerBox = (Bo
问题内容: 我正在建立MS Access 2007中数据库的查询,并且想知道我当前的设计实践是否达到标准。基本上,数据库是在我来之前配置的,但是我被赋予构建高效查询以提取数据的责任。 我当前的查询既小又简单,每个查询一次完成2-3个任务(有时只有1个)。之所以采用这种方法,是因为我对SQL完全陌生,并且发现与许多简单的查询一起使用并使用报告来合并数据比较容易,而与构建极其复杂的查询相对较容易,后者
RxJava的cast()函数是本章中最后一个操作符。它是map()操作符的特殊版本。它将源Observable中的每一项数据都转换为新的类型,把它变成了不同的Class。
基于主题的高性能、可靠无代理 UDP 消息传递(“事件总线”)。可承受每秒高达 700 万个 70 字节的消息。 实现 NAK 协议所需的缓冲区不受影响,因此对 GC 的影响不大。如果配置得当,能保证可靠、有边界的低延迟。 要求 JDK 1.7 或更高版本 示例代码 基于快速序列化的对象组播(=广播)发布者: public static void main(String arg[]) {
Cast是一个库,以一致和简单的方式在不同的Go类型之间转换。 Cast提供了简单的函数,可以轻松地将数字转换为字符串,将接口转换为bool类型等等。当一个明显的转换是可能的时,Cast会智能地执行这一操作。它不会试图猜测你的意思,例如,你只能将一个字符串转换为int的字符串表示形式,例如“8”。Cast是为Hugo开发的,Hugo是一个使用YAML、TOML或JSON作为元数据的网站引擎。 为什
问题内容: 我正在将子系统从 NHibernate 移植到 Entity Framework, 并希望看到将以下查询移植到 EF 的最佳方法。 帐户余额类别为: 该表是: 示例数据是(使用数字ID可以更好地理解): 该 AccountBalanceByDate 实体持有某一天的账户余额。如果某天没有交易,则该天将没有 AccountBalanceByDate ,我们应该查看前几天以查看该帐户的余额
问题内容: 我需要从数据库中找到单词 Lämmönmyyntipalvelut 。只是,在数据库中,它位于字段中,其值一直是一个PHP数组,并使用json_encode()转换为JSON,因此特殊字符被乱写为十六进制unicode。 所以我的查询是 没有结果。没有惊喜。接下来,查询转换为特殊字符: 没有结果,我想知道为什么。接下来,我测试了仅查询特殊字符: 找到了应该找到的东西。接下来,我开始添加
问题内容: 我在PDO中实施LIKE时遇到问题 我有这个查询: 我检查了,并且它们都包含我要搜索的单词,由于我的某些查询 有效,因此我的PDO正常工作,只是我对PDO 不太熟悉。 结果不返回。我的语法正确吗? 问题答案: 您必须在而不是查询中包括符号: 如果您在之前的代码中查看生成的查询,则会看到类似的内容,因为prepared语句在一个已被引用的字符串内引用了您的值。