Hibernate如何将setters/getters映射到属性



在我的数据库表中,我有一个CHAR(1)列,它的内容可以是Y或N(CHECK约束)。我在Java中定义了一个String属性,并在类中定义了基于String的setter。此外,为了方便起见,我添加了一个带有布尔参数的@Transient setter/getter。

我的期望是Hibernate使用基于字符串的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);
}

我认为之所以会出现这个问题,是因为Stringboolean属性(即getter和setter)使用了相同的名称-请尝试为它们使用不同的名称。

或者,您可以使用一个自动处理此转换的内置类型——只需用@Type(type = "yes_no")注释boolean属性即可。

最新更新