Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从数据库读取时将JPA字符串转换为布尔值_Java_Jpa - Fatal编程技术网

Java 从数据库读取时将JPA字符串转换为布尔值

Java 从数据库读取时将JPA字符串转换为布尔值,java,jpa,Java,Jpa,在数据库中,我们存储一个值,该值为“Y”或“N”,类型为varchar。然而,在我的模型类中,比如说在“Employee”中,我有一个与该值对应的字段,它是:一个布尔值,比如布尔值isManager 如果我将类中的字段设置为字符串,那么一切都可以正常工作。但是,我想保持布尔值。这里可以做什么?JPA中有没有办法告诉它根据“Y”和“N”值转换为1或0或true或false?这在很大程度上取决于您的类和使用方式。如果您的类是一个没有逻辑的POJO,那么您可以不使用EntityListeners,而只

在数据库中,我们存储一个值,该值为“Y”或“N”,类型为varchar。然而,在我的模型类中,比如说在“Employee”中,我有一个与该值对应的字段,它是:一个布尔值,比如布尔值isManager


如果我将类中的字段设置为字符串,那么一切都可以正常工作。但是,我想保持布尔值。这里可以做什么?JPA中有没有办法告诉它根据“Y”和“N”值转换为1或0或true或false?

这在很大程度上取决于您的类和使用方式。如果您的类是一个没有逻辑的POJO,那么您可以不使用EntityListeners,而只使用JPA,只需将您的私有
管理器
字符串字段代理为临时布尔字段,例如:

...
private String manager;
private transient boolean managing;

...
public boolean isManaging {
    return "Y".equals(manager);
}

public void setManaging(boolean managing) {
    this.managing = managing;
    this.manager = managing ? "Y" : "N";
}
对于
管理器
,没有getter/setter,如果您愿意,也没有私有的getter/setter(或者注释您的方法而不是字段)

更好的做法是将
管理器
字段作为枚举,而不是带有JPA注释
@枚举(EnumType.String)
的字符串


编辑:另外,请查看

是否可以将列的数据类型更改为
char(1)
?您应该能够将布尔字段映射到该列。类似于
boolean isManager=rs.getString(“manager”).equals(“Y”)
?如果您愿意使用特定于提供程序的功能并使用Hibernate作为JPA提供程序,似乎有JPA特定的注释来实现Hibernate用户类型的行为:
boolean isManager=str.equals(“Y”)?:)谢谢你的建议,但我绝对正确。?也被称为三元运算符ternary来自拉丁语ternarius本身来自terni,意思是同时三个,而所谓的三元运算符是为了编写简洁的代码而引入的。无论如何都要自由地使用它,但是要有像
(…)这样的语句?真:假
会引起我的非议。@TheGreat:你可能是对的,但是okiharaherbst的表达式是绝对足够的,equals已经返回true或false,因此十进制运算符是肤浅的,与干净的代码IMHO相反
...
private String manager;
private transient boolean managing;

...
public boolean isManaging {
    return "Y".equals(manager);
}

public void setManaging(boolean managing) {
    this.managing = managing;
    this.manager = managing ? "Y" : "N";
}