Hibernate注解编译错误

7

当我尝试编译一个带有Hibernate注解以映射到数据库的DTO文件时,我遇到了一个奇怪的问题。在下面的日志中,出现了一个奇怪的错误信息。 这个问题的原因是什么?我想这个错误来自CashDTO文件。在CashDTO.java文件中,我做错了什么?

    import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.Version;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

    /**
     * @author othmanelmoulat
     * 
     */
    @Entity
    @TableGenerator(name = "cash_GEN", table = "jbilling_seqs", pkColumnName = "name", valueColumnName = "next_id", pkColumnValue = "cash", allocationSize = 100)
    @Table(name = "cash")
    public class CashDTO implements Serializable {
        int id;
        BigDecimal amount;
        Date date;
        int versionNum;

        public CashDTO() {
            super();
            // TODO Auto-generated constructor stub
        }

        public CashDTO(int id) {
            super();
            this.id = id;
        }

        public CashDTO(int id, BigDecimal amount, Date date) {
            super();
            this.id = id;
            this.amount = amount;
            this.date = date;
        }

        public CashDTO(int id, BigDecimal amount, Date date, int versionNum) {
            super();
            this.id = id;
            this.amount = amount;
            this.date = date;
            this.versionNum = versionNum;
        }

        @Id
        @GeneratedValue(strategy = GenerationType.TABLE, generator = "cash_GEN")
        @Column(name = "id", unique = true, nullable = false)
        public int getId() {
            return this.id;
        }

        public void setId(int id) {
            this.id = id;
        }
        @Column(name = "amount", nullable = false)
        public BigDecimal getAmount() {
            return amount;
        }

        public void setAmount(BigDecimal amount) {
            this.amount = amount;
        }
        @Column(name = "date", nullable = false)
        public Date getDate() {
            return date;
        }

        public void setDate(Date date) {
            this.date = date;
        }
        @Version
        @Column(name = "OPTLOCK")
        public int getVersionNum() {
            return versionNum;
        }

        public void setVersionNum(int versionNum) {
            this.versionNum = versionNum;
        }

    }

错误日志:

Buildfile: /Users/othmanelmoulat/Documents/workspace/jbilling/src/build.xml

init:
   [delete] Deleting directory /Users/othmanelmoulat/Documents/workspace/jbilling/src/build/test-results
    [mkdir] Created dir: /Users/othmanelmoulat/Documents/workspace/jbilling/src/build/test-results

compile_api:
    [javac] /Users/othmanelmoulat/Documents/workspace/jbilling/src/build.xml:272: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

findRevision:

jar_api:
      [jar] Building jar: /Users/othmanelmoulat/Documents/workspace/jbilling/src/build/deploy/jbilling_api.jar

test-ws:
    [javac] /Users/othmanelmoulat/Documents/workspace/jbilling/src/build.xml:457: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 7 source files to /Users/othmanelmoulat/Documents/workspace/jbilling/src/build/test
    [javac] com/sapienter/jbilling/server/user/db/CashDTO.class(com/sapienter/jbilling/server/user/db:CashDTO.class): warning: Cannot find annotation method 'name()' in type 'javax.persistence.TableGenerator': class file for javax.persistence.TableGenerator not found
    [javac] com/sapienter/jbilling/server/user/db/CashDTO.class(com/sapienter/jbilling/server/user/db:CashDTO.class): warning: Cannot find annotation method 'table()' in type 'javax.persistence.TableGenerator'
    [javac] com/sapienter/jbilling/server/user/db/CashDTO.class(com/sapienter/jbilling/server/user/db:CashDTO.class): warning: Cannot find annotation method 'pkColumnName()' in type 'javax.persistence.TableGenerator'
    [javac] com/sapienter/jbilling/server/user/db/CashDTO.class(com/sapienter/jbilling/server/user/db:CashDTO.class): warning: Cannot find annotation method 'valueColumnName()' in type 'javax.persistence.TableGenerator'
    [javac] com/sapienter/jbilling/server/user/db/CashDTO.class(com/sapienter/jbilling/server/user/db:CashDTO.class): warning: Cannot find annotation method 'pkColumnValue()' in type 'javax.persistence.TableGenerator'
    [javac] com/sapienter/jbilling/server/user/db/CashDTO.class(com/sapienter/jbilling/server/user/db:CashDTO.class): warning: Cannot find annotation method 'allocationSize()' in type 'javax.persistence.TableGenerator'
    [javac] com/sapienter/jbilling/server/user/db/CashDTO.class(com/sapienter/jbilling/server/user/db:CashDTO.class): warning: Cannot find annotation method 'name()' in type 'javax.persistence.Table': class file for javax.persistence.Table not found
    [javac] com/sapienter/jbilling/server/user/db/CashDTO.class(com/sapienter/jbilling/server/user/db:CashDTO.class): warning: Cannot find annotation method 'strategy()' in type 'javax.persistence.GeneratedValue': class file for javax.persistence.GeneratedValue not found
    [javac] An exception has occurred in the compiler (1.6.0_24). Please file a bug at the Java Developer Connection (http://java.sun.com/webapps/bugreport)  after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report.  Thank you.
    [javac] com.sun.tools.javac.code.Symbol$CompletionFailure: class file for javax.persistence.GenerationType not found

BUILD FAILED
/Users/othmanelmoulat/Documents/workspace/jbilling/src/build.xml:457: Compile failed; see the compiler error output for details.

Total time: 5 seconds

这是由编译器中的错误引起的 - http://bugs.java.com/view_bug.do?bug_id=6550655 - ᄂ ᄀ
1个回答

5

看起来在你的test-ws Ant目标中,javax.persistence类不在javac任务的类路径上。


奇怪!在我添加CashDTO类之前,测试WS运行得很成功,而且CashDTO与我的代码中的其他旧DTO没有什么不同。为什么只有CashDTO类抱怨,而不是其他与CashDTO非常相似的DTO类呢? - othman
抱歉,你是对的。我不应该在我的测试ws中使用Hibernate注释的DTO。我必须创建另一个DTO来与测试ws一起使用。 - othman
但是为什么javac默认没有它们在classpath中,这是我的问题? javac本身嵌套在JDK c:\ Program Files(x86)\ Java \ jdk1.6.0_26 \ bin \ javac.exe中,所以它不应该找到它们吗? (对于关注者,这是我的修复方法:http://betterlogic.com/roger/2011/07/javachibernate-woe/评论1) - rogerdpack
@rogerdpack,我认为JPA库不会随JDK一起发布,除非最近有所改变。 - matt b
这很有道理。出于某种原因,我以为它们会与Netbeans/J2EE之类的东西一起使用,但我猜它们只是这样做。所以我的下一个问题是,从hibernate获取它们是否是最好的选择...令人惊讶的是,一个javax.xxx的东西没有随JDK一起发布... - rogerdpack
@rogerdpack 这是编译器的一个错误 - http://bugs.java.com/view_bug.do?bug_id=6550655 - ᄂ ᄀ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接