在我的项目中我使用JPA 2.0和eclipselink inplementation,我有以下问题:
我用boolean column定义了实体:
@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)。有没有正确的方法来编写这个查询?
由于
答案 0 :(得分:13)
答案 1 :(得分:1)
我也有这个问题(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;
.......
}
答案 2 :(得分:0)
我使用EclipseLink作为JPA提供程序和MySQL数据库。使用此配置,使用1表示true,0表示false表示。
答案 3 :(得分:0)
您可以使用@TypeConverter(dataType = Integer.class)
答案 4 :(得分:0)
您可以编写如下查询:
@Query("来自用户的u你选择u.active");
它将首先显示非活动用户。如果您希望看到活跃用户首次使用,请执行以下操作:
@Query("通过u.active desc&#34从User u order中选择你;);
答案 5 :(得分:0)
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);
答案 6 :(得分:0)
对于MySql来说,这是可行的:
public interface UserRepository extends JpaRepository<User, Long> {
@Query("SELECT e FROM Employee e WHERE e.active=?1")
User findByStatus(Boolean active);
}
答案 7 :(得分:0)
它正在我的场景中运行: findByTitleAndDocumentIdAndIsDeleted(字符串标题,UUID docId,布尔isDeleted);
答案 8 :(得分:-4)
TRUE是一个特殊关键字。 尝试
从用户u中选择你,其中u.active IS TRUE;