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