在我的项目中,我使用JPA 2.0和eclipselink实现,我有以下问题:
我用boolean列定义了实体:
@Entity
public User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="USR_ID")
private Short id;
@Column(name="USR_NAME")
private String name;
@Column(name="USR_ACTIVE")
private boolean active;
.......
}
我想创建将返回所有活动用户的查询,如下所示:
从用户u中选择你,其中u.active = TRUE;
但是,如果我使用该查询,我得到的异常是布尔值不能转换为Short(数据库中的列存储为smallint)。有没有正确的方法来编写这个查询?
谢谢
我也遇到了这个问题(PostgreSQL + Eclipselink),并使用@TypeConverter
和@Convert
注释。
@Entity
@TypeConverter(name = "booleanToInteger", dataType = Integer.class)
public User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="USR_ID")
private Short id;
@Column(name="USR_NAME")
private String name;
@Column(name="USR_ACTIVE")
@Convert("booleanToInteger")
private boolean active;
.......
}
SELECT e FROM Employee e WHERE e.active = TRUE
在上面的查询中,如何将TRUE / FALSE作为用户参数传递?当我在下面尝试时,它不会根据用户输入返回值(TRUE / FALSE)。
这是命名查询
SELECT e FROM Employee e WHERE e.active = :inputValue
在这里我调用上面的名称查询
Query getEmployeesByState= entityManager.createNamedQuery("above query name");
getEmployeesByState.setParameter("active", Boolean.FALSE);
我使用EclipseLink作为JPA提供程序和MySQL数据库。使用此配置,使用1表示true,0表示false表示。
你可以使用@TypeConverter(dataType = Integer.class)
您可以编写如下查询:
@Query(“通过u.active从用户u order中选择你”);
它将首先显示非活动用户。如果你想看到活跃用户首先使用如下:
@Query(“通过u.active desc从用户u order中选择你”);
对于MySql工作原理:
public interface UserRepository extends JpaRepository<User, Long> {
@Query("SELECT e FROM Employee e WHERE e.active=?1")
User findByStatus(Boolean active);
}
它在我的场景中工作:findByTitleAndDocumentIdAndIsDeleted(String title,UUID docId,Boolean isDeleted);
TRUE是一个特殊的关键字。尝试
从用户u中选择u,其中u.active为TRUE;