在我的数据库表中,我有一个CHAR(1)
列,可以将Y或N作为其内容(CHECK约束)。我在Java中定义了一个String属性,在我的类中定义了一个基于String的setter。此外,为方便起见,我添加了一个带有布尔参数的@Transient
setter / getter。
我的期望是Hibernate使用基于String的setter / getter进行数据库访问。但是,在运行时,我得到一个IllegalArgumentExceptions,并且boolean和String之间的类型不匹配。
那么,根据Hibernate做什么属性来做映射?方法名称?参数名称?参数类型?在设置器中使用final
是否可以,或者这会引起谣言?如果我的财产的名称与我的表格列不同,它会有什么不同吗?
private String foobar = "N";
public void setFoobar(final String foobar) {
this.foobar = foobar;
}
@Column(name = "FOOBAR")
public String getFoobar() {
return this.foobar;
}
@Transient
public void setFoobar(final boolean foobar) {
this.setFoobar(foobar ? "Y" : "N");
}
@Transient
public boolean isFoobar() {
return (this.getFoobar().equals("Y") ? true : false);
}
答案 0 :(得分:1)
我认为发生此问题是因为您对String
和boolean
属性(即getter和setter)使用相同的名称 - 尝试为它们使用不同的名称。
或者,您可以使用自动处理此转化的内置类型 - 只需使用boolean
注释您的@Type(type = "yes_no")
媒体资源。