有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何避免在多对一映射时重复父实体的值

我有一个“分类”课程&;他们有多对一映射的“产品”。每当我尝试将表中的第二行产品插入到与第一行产品相同的类别下时。类别值被复制,这是我不希望发生的。因此,对于上述场景,我需要一个类别id映射到product表中的两个产品

package com.shop.model;

public class Product {

private int productId;
private String productName;
private String productDescription;
private int productPrice;
private ProductCategory productCat;
private int status;
private String date;

public int getProductId() {
    return productId;
}

public void setProductId(int productId) {
    this.productId = productId;
}

public String getProductName() {
    return productName;
}

public void setProductName(String productName) {
    this.productName = productName;
}

public String getProductDescription() {
    return productDescription;
}

public void setProductDescription(String productDescription) {
    this.productDescription = productDescription;
}

public int getProductPrice() {
    return productPrice;
}

public void setProductPrice(int productPrice) {
    this.productPrice = productPrice;
}

public ProductCategory getProductCat() {
    return productCat;
}

public void setProductCat(ProductCategory productCat) {
    this.productCat = productCat;
}

public int getStatus() {
    return status;
}

public void setStatus(int status) {
    this.status = status;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}
}


//category table 

package com.shop.model;

public class ProductCategory {

private int productCatId;
private String categoryName;
private String categoryDescription;

public int getProductCatId() {
    return productCatId;
}

public void setProductCatId(int productCatId) {
    this.productCatId = productCatId;
}

public String getCategoryName() {
    return categoryName;
}

public void setCategoryName(String categoryName) {
    this.categoryName = categoryName;
}

public String getCategoryDescription() {
    return categoryDescription;
}

public void setCategoryDescription(String categoryDescription) {
    this.categoryDescription = categoryDescription;
}
}


//Mapping xml files 

//product.mapping.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 
3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

<class name = "com.shop.model.Product" table="product">
    <id name = "productId">
        <generator class = "increment"/>
    </id>
    <property name = "productName"/>
    <property name = "productDescription"/>
    <property name = "productPrice"/>
    <property name = "status"/>
    <property name = "date"/>
    <many-to-one name = "productCat" class = 
"com.shop.model.ProductCategory"/>
</class>

</hibernate-mapping>

//category.mapping.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 
3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

 <class name = "com.shop.model.ProductCategory" table="productcategory">
    <id name = "productCatId">
        <generator class = "increment"/>
    </id>
    <property name = "categoryName"/>
    <property name = "categoryDescription"/>
</class>

</hibernate-mapping>


//Test class

package Test;

import com.shop.model.Product;
import com.shop.model.ProductCategory;
import com.shop.model.ProductComment;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class Test {

public static void main(String[] args) {

    Configuration cfg = new Configuration();
    cfg.configure("hibernate.cfg.xml");
    SessionFactory sf = cfg.buildSessionFactory();
    Session s = sf.openSession();
    Transaction t = s.beginTransaction();

    ProductCategory p = new ProductCategory();
    p.setCategoryName("Food");
    p.setCategoryDescription("Food items....");

    Product product = new Product();
    product.setProductName("Milk");
    product.setProductDescription("Fresh Milk");
    product.setProductPrice(200);
    product.setDate("11-10.2017");
    product.setStatus(1);
    product.setProductCat(p);

    ProductComment pcm = new ProductComment();
    pcm.setComment("Best product in the year");
    pcm.setTime("12-17.2017 1:20 PM");
    pcm.setProduct(product);

    ProductComment pcm2 = new ProductComment();
    pcm2.setComment("Peoples choise");
    pcm2.setTime("12-15-2017 3:20 PM");
    pcm2.setProduct(product);

    s.saveOrUpdate(p);
    s.saveOrUpdate(product);
    s.saveOrUpdate(pcm);
    s.saveOrUpdate(pcm2);

    t.commit();   
}
}

共 (0) 个答案