Hibernate如何将setter / getter映射到属性?

时间:2014-09-20 17:41:09

标签: java hibernate boolean mapping

在我的数据库表中,我有一个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);
}

1 个答案:

答案 0 :(得分:1)

我认为发生此问题是因为您对Stringboolean属性(即getter和setter)使用相同的名称 - 尝试为它们使用不同的名称。

或者,您可以使用自动处理此转化的内置类型 - 只需使用boolean注释您的@Type(type = "yes_no")媒体资源。