java - 类 : model. 类别中的 IllegalArgumentException,属性的 getter 方法:id

标签 java hibernate h2

情况:我有 2 个具有 oneToMany 关系的类(类别 oneToMany 产品), 创建这样的产品时:

Category c1 = new Category("Printer");
    Category c2 = new Category("Scanner");
    Category c3 = new Category("Phone");
    Factory.getInstance().getCategoryDAO().addCategory(c1);//id1
    Factory.getInstance().getCategoryDAO().addCategory(c2);//id2
    Factory.getInstance().getCategoryDAO().addCategory(c3);//id3

    //Product(catID, name, price)
    Product p1 = new Product(2,"Panasonic", new BigDecimal("322.12"));
    Product p2 = new Product(2,"Samsung", new BigDecimal("700.01"));
    Product p3 = new Product(3,"NOKIA", new BigDecimal("12000.12"));

    Factory.getInstance().getProductDAO().addProduct(p1);
    Factory.getInstance().getProductDAO().addProduct(p2);
    Factory.getInstance().getProductDAO().addProduct(p3);

我遇到了这个异常:

    Hibernate: insert into categories (CATEGORY_ID, CATEGORY_NAME) values (null, ?)
Hibernate: insert into categories (CATEGORY_ID, CATEGORY_NAME) values (null, ?)
Hibernate: insert into categories (CATEGORY_ID, CATEGORY_NAME) values (null, ?)
авг 22, 2016 12:06:21 AM org.hibernate.property.BasicPropertyAccessor$BasicGetter get
ERROR: HHH000122: IllegalArgumentException in class: model.Category, getter method of property: id
авг 22, 2016 12:06:36 AM org.hibernate.property.BasicPropertyAccessor$BasicGetter get
ERROR: HHH000122: IllegalArgumentException in class: model.Category, getter method of property: id
авг 22, 2016 12:06:37 AM org.hibernate.property.BasicPropertyAccessor$BasicGetter get
ERROR: HHH000122: IllegalArgumentException in class: model.Category, getter method of property: id

类(class)类别:

    public class Category {

    private Integer id;
    private String name;
    private Set<Product> products;

    public Category(String name) {
        this.name = name;
        this.products = new HashSet<Product>(0);
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Set<Product> getProducts() {
        return products;
    }

    public void setProducts(Set<Product> products) {
        this.products = products;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

类产品:

    public class Product {

    private Integer id;
    private Integer catId;
    private String name;
    private BigDecimal price;

    public Product(Integer catId, String name, BigDecimal price) {
        this.catId = catId;
        this.name = name;
        this.price = price;
    }

    public Integer getId() {
        return id;
    }

    public Integer getCatId() {
        return catId;
    }

    public String getName() {
        return name;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public void setCatId(Integer catId) {
        this.catId = catId;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }
}

和类别映射:

<class name="model.Category" table="categories">

    <id name="id" type="java.lang.Integer">
        <column name="CATEGORY_ID"/>
        <generator class="identity"/>
    </id>

    <property name="name" type="java.lang.String">
        <column name="CATEGORY_NAME" not-null="true" unique="true"/>
    </property>

    <set name="products" table="products" lazy="false" inverse="true" fetch="select">
        <key>
            <column name="CAT_ID" not-null="true"/>
        </key>
        <one-to-many class="model.Product"/>
    </set>

</class>

和产品映射:

<hibernate-mapping>

<class name="model.Product" table="products">

    <id name="id" type="java.lang.Integer">
        <column name="PRODUCT_ID"/>
        <generator class="identity"/>
    </id>

    <property name="name" type="java.lang.String">
        <column name="PRODUCT_NAME"/>
    </property>

    <property name="price" type="java.math.BigDecimal" precision="2" scale="16" >
        <column name="PRODUCT_PRICE"/>
    </property>

    <many-to-one name="catId" class="model.Category" fetch="select">
        <column name="CAT_ID" not-null="true"/>
    </many-to-one>

</class>

最佳答案

我自己找到了解决方案。 我在 Product 类中将 private Integer catId; 替换为 private Category Category;

关于java - 类 : model. 类别中的 IllegalArgumentException,属性的 getter 方法:id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39066944/

相关文章:

java - 除主以外的 Hibernate OneToMany 关联

java - 显示三张卡片图像 - JavaFX

java - JPA 2.0 中的 session 和事务有什么区别?

java - 如何使用 Eclipse 启动 Web 应用程序

hibernate - JPA 注释 = EJB3 注释 = Hibernate 注释?

hibernate - CRUD 存储库不遵守 UNIQUE 约束

java - 同步方法没有像我预期的那样工作

java - 构建hibernate实体时如何处理双向关系?

h2 - jHipster - 加载数据

testing - 如果 liquibase 格式的 sql 已经存在,我如何让 liquibase 跳过表创建?