- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 JPA2 标准 API 对以下类进行简单查询:
// a lot of imports
@Entity
public class Thing {
enum Type { FIRST, SECOND, THIRD };
@SequenceGenerator(name = "Thing_SeqGen", sequenceName = "Thing_Id_Seq", initialValue = 1000)
@Id
@GeneratedValue(generator = "Thing_SeqGen")
private int id;
private String name = "name";
@Enumerated(EnumType.STRING)
@ElementCollection(targetClass = Thing.Type.class)
@CollectionTable(name = "TYPES", joinColumns = { @JoinColumn(referencedColumnName = "ID", name = "TYPE_ID") })
private Set<Thing.Type> typeSet = new HashSet<Thing.Type>();
public static void main(final String[] args) {
new Thing().start();
}
public void start() {
final Thing firstThing = new Thing();
firstThing.setName("First one");
firstThing.setTypeSet(EnumSet.of(Thing.Type.FIRST));
final Thing firstAndSecondThing = new Thing();
firstAndSecondThing.setName("Test2");
firstAndSecondThing.setTypeSet(EnumSet.of(Thing.Type.FIRST, Thing.Type.SECOND));
final Thing bareThing = new Thing();
bareThing.setName("Test3");
final EntityManagerFactory emf = Persistence.createEntityManagerFactory("sandbox");
final EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(firstThing);
em.persist(firstAndSecondThing);
em.persist(bareThing);
em.getTransaction().commit();
em.getTransaction().begin();
final CriteriaBuilder cb = em.getCriteriaBuilder();
final CriteriaQuery<Thing> c = cb.createQuery(Thing.class);
final Root<Thing> root = c.from(Thing.class);
final Join<Thing, Set<Thing.Type>> typeJoin = root.join("typeSet");
c.select(root).distinct(true).where(cb.isEmpty(typeJoin));
final List<Thing> results = em.createQuery(c).getResultList();
em.getTransaction().commit();
}
// getter/setter methods omitted
}
我要查询的是:查找所有没有排版的东西。
完成这项工作的 JPQL 是:
从 t.typeSet 为空的 Thing t 中选择 t
JPQL 查询返回一个预期的结果。条件查询不返回任何结果。 CriteriaBuilder
创建:
SELECT DISTINCT t0.ID, t0.NAME FROM THING t0, TYPES t1 WHERE (((SELECT COUNT(t2.ID) FROM THING t2 WHERE (t1.TYPE_ID = t0.ID)) = 0) * *AND (t1.TYPE_ID = t0.ID)**)
最后的 theta-join(标记为 **)将全部杀死。而且我不知道为什么表 THING
被指定两次 (THING to, THING t1)
。
显然我做错了。但我不知道出了什么问题。
最佳答案
我猜问题是您正试图在 Criteria 案例中进行显式联接,而在 JPQL 中您没有这样做。所以省略连接并做类似的事情
Metamodel model = emf.getMetamodel();
ManagedType thingType = model.managedType(Thing.class);
CollectionAttribute typeSetAttr = thingType.getCollection("typeSet");
c.select(root).distinct(true).where(cb.isEmpty(root.get(typeSetAttr)));
然后这应该转换为与您发布的相同的 JPQL ...或者至少它适用于 DataNucleus JPA 实现。
关于api - ElementCollection 与 JPQL 方法上的 CriteriaBuilder.isEmpty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6340554/
var foo = { bar: ''}; 我经常看到这样的代码: if(foo.bar.isEmpty()){ //this line most of the time breaks
我希望能够编写一个条件,使我可以搜索所有具有特定DevelopmentOfInterest(hasMany)或根本没有任何线索的线索。 我的域模型如下所示: Lead { Set develop
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
如果您已经知道集合不为空,什么对性能更好。使用 Apache Commons 库中的 !collection.isEmpty() 或 CollectionUtils.isNotEmpty(collec
TextUtils.isEmpty(string)和string.isEmpty有什么区别? 两者都执行相同的操作。 使用 TextUtils.isEmpty(string) 有好处吗? 最佳答案 是
我知道这很奇怪,但这就是我所拥有的。 我正在编写单元测试来检查 Android 应用程序的逻辑。在测试执行期间,我看到它在那一行失败了: if (!TextUtils.isEmpty(fromFile
虽然 oracles 方法的描述说仅当字符串长度为 0 时才返回 true,但 string utils 方法的描述说该方法还会检查字符串是否为“null”。那我应该用什么方法呢?如果字符串的长度为
你能帮我解决这个 VBA 代码吗?我认为问题在于 IsEmpty 函数中的 Cells 函数,即 Excel 指责错误的行。由于评论,我做了一些更改,但它仍然没有运行。问题在于 IsEmpty 函数的
我正在尝试弄清楚一些基本的事情。我在探索标准库ArrayList.java时发现ArrayList具有方法isEmpty()的实现。 ArrayList.java: public boolean is
我通过以下方式在 Controller 中查看: $data = Lib::index(); $view = View::make('index') ->with('data'
我必须优化和算法,我注意到我们有一个像这样的循环 while (!floorQueues.values().stream().allMatch(List::isEmpty)) 似乎在每次迭代中它都会检
我有关于代码装饰的问题。 例如我应该处理来自 DAO 的对象 val user1 = DAO.get(token) val user2 = DAO.get(token) val user3 = DAO
我有一个双向链表,并且我编写了一个函数来检查列表是否为空。 函数代码: int isEmpty(list *l) { if(l->head== NULL && l->tail== NULL)
我在实现扩展函数以确定实体是否包含任何结果时遇到了一些问题。最终目标是确定实体是否有结果,如果没有,则在应用程序启动时将其播种(对于某些实体,如国家/地区列表等...) 这是我能够得到的地方,但是 s
这两种方法有什么区别? public boolean nameControl(String str) { if (str.trim().isEmpty()) return false;
我正在寻找一个 if 语句来检查输入字符串是否为空或仅由空格组成,如果不是则继续下一个输入。下面是我目前的代码,当我输入空格时会出错。 name = name.trim().substring
我无法在将提供的值缩小为空对应值的类型约束方面正确实现通用 isEmpty(value)。 用例: function getCountryNameById(countries: LookupItem[
我正在 Eclipse 中处理一个学校项目,当我尝试在 String 上使用 isEmpty() 方法时,Eclipse 显示以下错误: The method isEmpty() is undefin
当我尝试使用 isEmpty 函数检查模型是否为空时,Laravel 5.6 出现错误。 型号: namespace App\Models\Projectmanagement; use Illumin
isEmpty的实现在 Option很简单 - 这是一个草图: abstract class Option[+A] { def isEmpty:Boolean } object
我是一名优秀的程序员,十分优秀!