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);
Hibernate映射之OneToOne(第二篇)的更多相关文章
- hibernate映射文件one-to-one
one-to-one 元素 属性: name:映射类属性的名字 class:映射的目标类 cascade:设置操作中的级联策略 可选值为 all所有操作情况均进行级联.none所有操作情况均不进行级联 ...
- 【SSH系列】hibernate映射 -- 一对一双向关联映射
开篇前言 上篇博文[SSH进阶之路]hibernate映射--一对一单向关联映射,小编介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身 ...
- 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)
[SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,採用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...
- Hibernate —— 映射关联关系
一.映射多对一关联关系. 1.单向的多对一 (1)以 Customer 和 Order 为例:一个用户可以发出多个订单,而一个订单只能属于一个客户.从 Order 到 Customer 是多对一关联关 ...
- Hibernate映射文件如何配置触发器
Hibernate映射文件之触发器生成(generated属性.database-object元素) (2013-02-27 12:28:49) 转载▼ 标签: it 分类: JAVA学习笔记 这里分 ...
- hibernate映射的 关联关系:有 一对多关联关系,一对一关联关系,多对多关联关系,继承关系
hibernate环境配置:导包.... 单向n-1:单向 n-1 关联只需从 n 的一端可以访问 1 的一端 <many-to-one> 元素来映射组成关系: name: 设定待映射的持 ...
- 第二篇 Integration Services:SSIS数据泵
本篇文章是Integration Services系列的第二篇,详细内容请参考原文. 简介SSIS用于移动数据.数据流任务提供此功能.因为这个原因,当介绍SSIS时我喜欢从数据流任务开始.数据流任务的 ...
- 第二篇 SQL Server安全验证
本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文. 验证是检验主体的过程.主体需要唯一标识,那样SQL Server可以确定主体有哪些权限.正确的验证是提供安全访问数据库对象的必要的 ...
- Hibernate映射解析——七种映射关系
首先我们了解一个名词ORM,全称是(Object Relational Mapping),即对象关系映射.ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现,这样开发人员就可以把对 ...
随机推荐
- 基于综合服务平台浅谈Sass应用
一. 前言 CSS不是一种编程语言,只是单纯的一行行的描述,没有逻辑没有变量,因此写CSS对于习惯于运用逻辑思维编码的程序员来说是一件很头疼的事.于是勤奋的程序员就开始运转他们敏捷的大脑, ...
- js实现图片的淡入淡出
思想: 其实是运动的一种,就是当鼠标移入div中时,将div的透明度变大, 当鼠标移动出来的时候透明度变回原来. 你可以尝试写一下,不会再看看代码 <style> #div1{ width ...
- CentOS6.5下安装apache2.2和PHP 5.5.28
CentOS6.5下安装apache2.2 1. 准备程序 :httpd-2.2.27.tar.gz 下载地址:http://httpd.apache.org/download.cgi#apache2 ...
- Android ImageView显示本地图片
Android ImageView 显示本地图片 布局文件 <?xml version="1.0" encoding="utf-8"?> <R ...
- MVC项目内无法添加System.Web.Optimization
MVC项目内无法添加System.Web.Optimization Nuget:Install-PackageMicrosoft.AspNet.Web.Optimization
- 自定义属性,资源文件attrs.xml
1.attrs.xml中写:在values文件夹下. <?xml version="1.0" encoding="utf-8"?> <reso ...
- html-css实例
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- Hadoop HDFS编程 API入门系列之HdfsUtil版本1(六)
不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs2; import java.io.FileOutputStream;impor ...
- Windows7 IE10运行不了JavaScript的问题
如题,我的环境是Windows7 + IE10,JavaScript怎么也运行不了.郁闷了好一段时间. 后来发现一种办法终于可以让JavaScript运行起来. 具体: 点击 [工具] => ...
- [纯小白学习OpenCV系列]官方例程01:Load and Display an Image
Version: OpenCV 2.4.9 IDE : VS2010 OS : Windows --------------------------------------------- ...