zoukankan      html  css  js  c++  java
  • Hibernate映射之OneToOne(第二篇)

    这是在项目中实际遇到的一个问题,纠结了很久。一开始参考mkyong的 ,两边都写OneToOne ,后来查看了一下项目经理在原来一些模块中的写法。 学习一下:

    首先是E-R图:  一个货品可以进行多次调价。调价记录保存在productPrice表里面。

    而Product表保存了最新一次调价的productPrice_id .第一次见这种表设计,感觉很怪。

    Product类:

    package net.myspring.blue.modules.crm.entity;
    
    import javax.persistence.Cacheable;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;
    import javax.persistence.Transient;
    
    import org.junit.Ignore;
    
    import net.myspring.blue.common.persistence.DataEntity;
    
    @Entity
    @Table(name="crm_product")
    @Cacheable
    public class Product extends DataEntity {
        private String name;
        private String namePinyin;
        private Brand brand;  //manyToOne
        private ProductPrice productPrice;
        private Long brandId;
        
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getNamePinyin() {
            return namePinyin;
        }
    
        public void setNamePinyin(String namePinyin) {
            this.namePinyin = namePinyin;
        }
    
        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "brand_id")
        public Brand getBrand() {
            return brand;
        }
    
        public void setBrand(Brand brand) {
            this.brand = brand;
        }
        
        @Ignore
        @OneToOne(fetch=FetchType.LAZY)
        @JoinColumn(name="product_price_id")
        public ProductPrice getProductPrice() {
            return productPrice;
        }
    
        public void setProductPrice(ProductPrice productPrice) {
            this.productPrice = productPrice;
        }
        @Transient
        public Long getBrandId() {
            if(brandId==null && brand!=null) {
                brandId=brand.getId();
            }
            return brandId;
        }
    
        public void setBrandId(Long brandId) {
            this.brandId = brandId;
        }
        
    }

    ProductPrice类:

    package net.myspring.blue.modules.crm.entity;
    
    import java.math.BigDecimal;
    
    import javax.persistence.Cacheable;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
    
    import net.myspring.blue.common.persistence.DataEntity;
    
    @Entity
    @Table(name="crm_product_price")
    @Cacheable
    public class ProductPrice extends DataEntity{
        private BigDecimal oldPrice;
        private BigDecimal newPrice;
        private Product product; //ManyToOne
        
        public ProductPrice(BigDecimal oldPrice,BigDecimal newPrice,Product product){
            this.oldPrice=oldPrice;
            this.newPrice=newPrice;
            this.product=product;
        }
        public ProductPrice(){        
        }
        
        public BigDecimal getOldPrice() {
            return oldPrice;
        }
    
        public void setOldPrice(BigDecimal oldPrice) {
            this.oldPrice = oldPrice;
        }
    
        public BigDecimal getNewPrice() {
            return newPrice;
        }
    
        public void setNewPrice(BigDecimal newPrice) {
            this.newPrice = newPrice;
        }
    
        @ManyToOne(fetch=FetchType.LAZY)
        @JoinColumn(name="product_id")
        public Product getProduct() {
            return product;
        }
    
        public void setProduct(Product product) {
            this.product = product;
        }
        
    }

    注意Product和ProductPrice表之间的映射注解:
    product.productPrice是这样的
      @OneToOne(fetch=FetchType.LAZY)
        @JoinColumn(name="product_price_id")
        public ProductPrice getProductPrice() {
            return productPrice;
        }

     而productPrice.product是这样的:

      @ManyToOne(fetch=FetchType.LAZY)
        @JoinColumn(name="product_id")
        public Product getProduct() {
            return product;
        }

    持久化操作:
    productPriceDao.save(productPrice); //先save  productPrice?有点看不懂
    product.setProductPrice(productPrice); 

    productDao.save(product);
     
  • 相关阅读:
    java 内部类
    webservice restful rpc
    linux 修改文件权限chmod
    java ThreadLocal的理解
    转:Eclipse常用开发插件
    Eclipse安装插件支持jQuery智能提示
    转:VS2008 vs2010中JQUERY智能提醒
    jquery ui和jquery easy ui的区别
    线程池
    java连接数据库URL
  • 原文地址:https://www.cnblogs.com/ChenJunHacker/p/4501057.html
Copyright © 2011-2022 走看看