java - Hibernate/JPA 使用标准作为注释

标签 java hibernate jpa criteria hibernate-criteria

有人知道是否可以通过注释对对象属性强加标准。这与 @Where 子句类似,但是我需要过滤的属性实际上并不在执行 SELECT 的表上,因为它是被映射的。

希望这个例子能够说明:

public class Container {

  @OneToMany(mappedBy = "container")
  private List<Item> items;

  //getter & setter ...

}

public class Item {

  @ManyToOne
  private Container container;

  @OneToOne(mappedBy = "item")
  private User user;

  //getter & setter ...

}

public class User {

  @OneToOne
  private Item item;

  //getter & setter ...

}

我想获取一个没有关联UserContainer。如果 user 属性确实位于 Item 表上,则应该可以使用 @Where:

public class Container {

  @OneToOne(mappedBy = "container")
  @Where(clause = "user is null")
  private List<Item> items;

  //getter & setter ...

}

但是既然它是mappedBy,有没有办法做到这一点?这些表的连接显然已经在 SQL 中执行了。也许有一种方法可以引用 user 属性,例如HQL?

非常感谢任何帮助

最佳答案

HQL中:

select item.container from item i where i.user is null

Container.java

@NamedQueries({
    @NamedQuery(
    name = "findContainerWithNoUser",
    query = "select item.container from item i where i.user is null"
    )
})
@Entity
public class Container {

  @OneToOne(mappedBy = "container")
  private List<Item> items;

  //getter & setter ...

}

关于java - Hibernate/JPA 使用标准作为注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20993262/

相关文章:

java - Spring 配置@RefreshScope

java - 从 Servlet 写入文件

java.sql.SQLException : [Microsoft][ODBC Microsoft Access Driver] Cannot update. 数据库或对象是只读的

spring-boot - 字段存储库需要找不到名为 'entityManagerFactory'的bean

java - 在 CriteriaQuery 中正确编写 JOIN

java - SerialVersionUID 对于外部化类真的有意义吗?

Java 9 模块和 JUnit 4

java - JPQL 查询实体内的字符串列表

java - 如何使用 entityManager 在 JPA 中启动事务

java - hibernate :无法从 ResultSet 和 IllegalArgumentException:GregorianCalendar.computeTime 读取实体状态