【发布时间】:2010-10-11 22:12:35
【问题描述】:
Java bean 格式:
public class Format extends HibernateBean implements Serializable {
private static final Logger log = Logger.getLogger(Format.class);
private Long id;
private boolean isQualifyFormat;
...other fields
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
**//static method, it's exposed to a HttpServlet**
public static Format getQualifyFormat() throws HibernateException {
log.debug("getQualifyFormat");
...
}
/**
* @hibernate.property column="df_isqualifyinglistformat" type="boolean"
* @return boolean
*/
public boolean isQualifyFormat() {
log.debug ("isQualifyFormat");
return isQualifyingListFormat;
}
public void setQualifyFormat(boolean qualifyFormat) {
isQualifyingListFormat = qualifyingListFormat;
}
...
}
Hibernate 映射文件,Format.hbm.xml
<hibernate-mapping>
<class
name="Format"
table="dbo.mc_distribution_format"
schema="data"
>
<id
name="id"
column="df_formatid"
type="java.lang.Long"
>
<generator class="native"></generator>
</id>
<property
name="qualifyFormat"
type="boolean"
update="true"
insert="true"
column="df_isqualifyformat"
/>
理论上,bean Format的方法isQualifyFormat应该在Hibernatepersistense过程中调用bean Format。据我所知,布尔属性的getter可以是模式is-或get-。如果方法 is- 在 bean 中两者都可用,则具有优先权。
但是,它在大多数情况下都能正常工作,但以下情况除外: 如果有代码参考同一个jar包中的静态方法Format.getQualifyFormat。上面的 getQualifyFormat 方法以某种方式被调用,即使它是静态的并且已经有 is-。
当我将代码升级到 JDK 1.5 时会发生这种情况。它在 JDK 1.4 中很好。 我猜这可能是由于 JDK 1.5 中的反射改进问题引起的,jdk/jre 是否会在编译时解析代码并找到静态方法 getQualifyFormat 的引用,然后将其缓存为属性qualifyFormat的默认getter?
有什么想法吗?
【问题讨论】:
-
您的代码看起来不一致并且非常混乱。
isQualifyFormat是方法和字段的名称。此外,该方法正在返回其他内容。此外,该字段的 setter 还设置了一些其他变量。 -
令人困惑,是的,同意!但是,语法没问题,对吧?字段 isQualifyFormat 具有 setter 方法 setQualifyFormat 和 getter 方法 isQualifyFormat。这也是我的问题,为什么静态方法 getQualifyFormat 会导致我提到的混乱。我需要有关属性方法在我的混乱案例中如何工作的参考。