Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDK1.5问题-布尔属性的getter方法被错误调用_Java_Hibernate - Fatal编程技术网

Java JDK1.5问题-布尔属性的getter方法被错误调用

Java JDK1.5问题-布尔属性的getter方法被错误调用,java,hibernate,Java,Hibernate,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() {

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格式的isQualifyFormat方法应该在bean格式的HibernatePersistense过程中调用。据我所知,布尔属性的getter可以是pattern is-或get-。方法is-如果在bean中两者都可用,则具有优先级

除以下情况外,它在大多数情况下都能正常工作: 如果有任何代码引用同一jar包中的静态方法Format.getQualifyFormat。上面的getQualifyFormat方法被调用,即使它是静态的,并且已经有了is-

当我将代码升级到JDK1.5时,就会发生这种情况。在JDK1.4中它很好。 我猜这可能是由于JDK1.5中的反射改进问题造成的,JDk/jre是否在编译时解析代码并找到静态方法getQualifyFormat的引用,然后将其缓存为属性qualifyFormat的默认getter


有什么想法吗?

如果你想让事情正常进行,你必须使用适当的惯例

如果字段名为
xyz

  • 访问器(“getter”)称为
    getXyz()
    (它是 可以也应该被称为
    isXyz()
    iff
    xyz
    属于
    布尔值
  • 变异子(“setter”)称为
    setXyz()
    并且必须返回void
如果不遵守这些约定,JavaBean方法将无法工作,而且几乎所有框架都使用这些方法

另外,在
isXyz()
方法旁边有一个静态的
getXyz()
方法,至少可以说是自找麻烦。我不知道它是否有效,但它令人非常困惑


在我个人看来,一个具有bean属性的类如果不是getter或setter,就不应该有任何其他名为get*、set*或is*的方法,以使方法意图更清晰。

您的代码看起来不一致,而且非常混乱
isQualifyFormat
是方法和字段的名称。此外,该方法本身也返回其他内容。此外,该字段的setter还设置了一些其他变量。令人困惑的是,同意!但是,语法还可以,对吗?字段isQualifyFormat具有setter方法setQualifyFormat和getter方法isQualifyFormat。这也是我的问题,为什么静态方法getQualifyFormat会造成我提到的混乱。我需要关于属性方法如何在我的混乱案例中工作的参考。谢谢!我同意你的建议。但是,问题是,我需要弄清楚在我的情况下它是如何出错的。我的字段isQualifyFormat具有setter方法setQualifyFormat和getter方法isQualifyFormat。当有任何代码引用静态方法格式时,为什么它会点击静态方法getQualifyFormat而不是isQualifyFormat。getQualifyFormat?我的猜测是hibernate首先查找get*()方法,并仅使用is*()方法作为回退。我不确定他们是否检查非静态方法(我甚至不确定bean规范要求方法是非静态的,尽管它们应该是)。所以:保持安全,避免误解。这有关系吗?正如所指出的,您的代码没有遵循JavaBeans规范。编辑这是与OP相关的,而不是与seanizer相关的。