在 JPA 中,我如何将 Y N 绑定到布尔类型

Posted

技术标签:

【中文标题】在 JPA 中,我如何将 Y N 绑定到布尔类型【英文标题】:In JPA how can i bind Y N to Boolean type 【发布时间】:2016-04-19 08:58:23 【问题描述】:

是否可以使用 JPA 注释在 mysql 中将布尔变量绑定到 VARCHAR(1) Y/N ?

我正在使用下面的映射@Basic @Column(name = "IS_ACTIVE", columnDefinition = "VARCHAR", length = 1) private Boolean active;

这是抛出异常

java.lang.IllegalArgumentException: Parameter value [A] did not match expected type [java.lang.Boolean (n/a)]

所以我找出了错误的原因,这是因为我将“Y”作为参数传递给命名查询。

params.put("isActive", "Y");

但是现在当我把它改成

params.put("isActive", Boolean.TRUE);

查询没有返回任何结果,它似乎将“true”作为参数传递给查询。

有人能告诉我如何正确映射吗?

<dependency>
        <groupId>org.jboss.spec</groupId>
        <artifactId>jboss-javaee-all-6.0</artifactId>
        <version>3.0.0.Final</version>
        <scope>provided</scope>
    </dependency>

【问题讨论】:

【参考方案1】:

最安全的方法是定义一个AttributeConverter,它将布尔值映射到字符串并映射到“Y”或“N”。然后定义您的布尔字段以使用该AttributeConverter

【讨论】:

@Convert 不可用,这是哪个库的一部分? 标准 JPA 2.1 的一部分,链接页面告诉您 我正在使用 jboss 6 EAP,它应该拥有一切,请查看具有 maven 依赖关系的更新帖子。这不包含所需的依赖项吗? 检查你的依赖内容不是我的“工作”。您应该知道您使用的是 JPA 1、JPA 2.0、JPA 2.1。 JavaEE6 可能是 JPA 2.0。但是你应该把它放在问题中,这样人们就有回答的基础

以上是关于在 JPA 中,我如何将 Y N 绑定到布尔类型的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 linq 将“Y”或“N”值转换为布尔值?

Oracle 中的 JPA 和 Flyway 布尔类型

使用 JPA 和 Hibernate 将 Java 布尔值映射到 Oracle Number 列

Cocoa:如何将布尔属性绑定到 NSCellStateValue?

WPF Radiobutton(二)(绑定到布尔值)

如何使用 JPA/Hibernate 注释将 MySQL char(n) 列映射到实例变量?