`

今天测试Hibernate映射的结果。

阅读更多



/***************************************************************************************************************************************************/

/*******************                           情况 1,2,3   之情况1(单向)       ------- 【让Product做主表去参照Dividend】

/***************************************************************************************************************************************************/


即:由


//我们发现是product参照dividend表。所以这里product是主表。set的时候要用 product.setDividend(dividend);

@Entity
@Table(name="wxsc_product")
public class Product extends EntitySupport{

	@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
	@JoinColumn(name="dividend_id",referencedColumnName="id")
	private Dividend dividend;//赠品



@Entity
@Table(name="wxsc_dividend")
public class Dividend extends EntitySupport {

	@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="dividend")
	private Product product;



以及:
Dividend dividend = new Dividend();
		dividend.setAttribute("玩具类");
		//dividend.setDividendId("DJFOIWEFILDJFOWFEjo-DJFWOE");
		dividend.setDividendName("赠品:自行车");
		dividend.setDividendNumber("484545488");
		dividend.setQuantity(2);
		dividend.setCreateTime(date);
		dividend.setUpdateTime(date);
	
	//下面让这两个商品p1,p2都赠送这一个赠品,另外一个商品p3则没有赠品
	Product p1 = new Product();
		p1.setArticleNumber("03558866-24-22");
		p1.setProductAttribute("湖南纸业出品");
		p1.setProductName("卫生纸");
		p1.setUnitPrice(14.32d);
		p1.setCreateTime(date);
		p1.setUpdateTime(date);
		p1.setDividend(dividend);
	Product p2 = new Product();
		p2.setArticleNumber("0694412548522");
		p2.setProductAttribute("广东阳江");
		p2.setProductName("水果刀");
		p2.setUnitPrice(6.5d);
		p2.setCreateTime(date);
		p2.setUpdateTime(date);
		p2.setDividend(dividend);
	
	Product p3 = new Product();
		p3.setArticleNumber("8754515484522");
		p3.setProductAttribute("广州经济开发区");
		p3.setProductName("茉莉蜜茶");
		p3.setUnitPrice(3.0d);
		p3.setCreateTime(date);
		p3.setUpdateTime(date);
		p3.setDividend(null);
	this.merge(p1);
	this.merge(p2);
	this.merge(p3);

生成的表关系是:


mysql> show create table wxsc_product;
+--------------+---------------------------------------------------------------------------------
| Table        | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
+--------------+---------------------------------------------------------------------------------
| wxsc_product | CREATE TABLE `wxsc_product` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `createTime` datetime NOT NULL,
  `updateTime` datetime NOT NULL,
  `version` int(11) NOT NULL,
  `article_number` varchar(255) DEFAULT NULL,
  `order_quantity` int(11) DEFAULT NULL,
  `product_attribute` varchar(255) DEFAULT NULL,
  `product_name` varchar(255) DEFAULT NULL,
  `unit_price` double DEFAULT NULL,
  `dividend_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FKEC59DBA19367CD45` (`dividend_id`),
  CONSTRAINT `FKEC59DBA19367CD45` FOREIGN KEY (`dividend_id`) REFERENCES `wxsc_dividend` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=gbk |
+--------------+----------------------------------------------------------------------------------
1 row in set (0.00 sec)

mysql> show create table wxsc_dividend;
+---------------+---------------------------------------------------------------------------------
| Table         | Create Table                                                                                                                                                                                                                                                                                                                                                                                                              |
+---------------+---------------------------------------------------------------------------------
| wxsc_dividend | CREATE TABLE `wxsc_dividend` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `createTime` datetime NOT NULL,
  `updateTime` datetime NOT NULL,
  `version` int(11) NOT NULL,
  `attribute` varchar(255) DEFAULT NULL,
  `dividend_name` varchar(255) DEFAULT NULL,
  `dividend_number` varchar(255) DEFAULT NULL,
  `quantity` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gbk |
+---------------+---------------------------------------------------------------------------------
1 row in set (0.00 sec)

会得到下面的结果。


mysql> select * from wxsc_dividend;
+----+---------------------+---------------------+---------+-----------+---------------+-----------------+----------+
| id | createTime          | updateTime          | version | attribute | dividend_name | dividend_number | quantity |
+----+---------------------+---------------------+---------+-----------+---------------+-----------------+----------+
|  1 | 2014-04-05 16:45:31 | 2014-04-05 16:45:31 |       0 | 玩具类    | 赠品:自行车   | 484545488       |        2 |
|  2 | 2014-04-05 16:45:31 | 2014-04-05 16:45:31 |       0 | 玩具类    | 赠品:自行车   | 484545488       |        2 |
+----+---------------------+---------------------+---------+-----------+---------------+-----------------+----------+
2 rows in set (0.00 sec)

mysql> select * from wxsc_product;
+----+---------------------+---------------------+---------+----------------+----------------+-------------------+--------------+------------+-------------+
| id | createTime          | updateTime          | version | article_number | order_quantity | product_attribute | product_name | unit_price | dividend_id |
+----+---------------------+---------------------+---------+----------------+----------------+-------------------+--------------+------------+-------------+
|  1 | 2014-04-05 16:45:31 | 2014-04-05 16:45:31 |       0 | 03558866-24-22 |              0 | 湖南纸业出品      | 卫生纸       |      14.32 |           1 |
|  2 | 2014-04-05 16:45:31 | 2014-04-05 16:45:31 |       0 | 0694412548522  |              0 | 广东阳江          | 水果刀       |        6.5 |           2 |
|  3 | 2014-04-05 16:45:31 | 2014-04-05 16:45:31 |       0 | 8754515484522  |              0 | 广州经济开发区    | 茉莉蜜茶     |          3 |        NULL |
+----+---------------------+---------------------+---------+----------------+----------------+-------------------+--------------+------------+-------------+
3 rows in set (0.00 sec)





/***************************************************************************************************************************************************/

/*******************                           情况 1,2,3   之情况2(单向)       ------- 【让Dividend做主表去参照Product】

/***************************************************************************************************************************************************/







修改为:(发现不能按下面这样子做,不然Product表的外键约束全是NULL)

//我们发现是 dividend 参照 product 表。所以这里 dividend 是主表。set的时候要用 dividend.setDividend(product);


@Entity
@Table(name="wxsc_product")
public class Product extends EntitySupport{

	@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="product")
	private Dividend dividend;//赠品


@Entity
@Table(name="wxsc_dividend")
public class Dividend extends EntitySupport {

	@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
	@JoinColumn(name="product_id",referencedColumnName="id")//我让Dividend做主表去参照Product
	private Product product;



以及:

       Dividend dividend = new Dividend();
		dividend.setAttribute("玩具类");
		//dividend.setDividendId("DJFOIWEFILDJFOWFEjo-DJFWOE");
		dividend.setDividendName("赠品:自行车");
		dividend.setDividendNumber("484545488");
		dividend.setQuantity(2);
		dividend.setCreateTime(date);
		dividend.setUpdateTime(date);
	
	//下面让这两个商品p1,p2都赠送这一个赠品,另外一个商品p3则没有赠品
	Product p1 = new Product();
		p1.setArticleNumber("03558866-24-22");
		p1.setProductAttribute("湖南纸业出品");
		p1.setProductName("卫生纸");
		p1.setUnitPrice(14.32d);
		p1.setCreateTime(date);
		p1.setUpdateTime(date);
		p1.setDividend(dividend);
	Product p2 = new Product();
		p2.setArticleNumber("0694412548522");
		p2.setProductAttribute("广东阳江");
		p2.setProductName("水果刀");
		p2.setUnitPrice(6.5d);
		p2.setCreateTime(date);
		p2.setUpdateTime(date);
		p2.setDividend(dividend);
	
	Product p3 = new Product();
		p3.setArticleNumber("8754515484522");
		p3.setProductAttribute("广州经济开发区");
		p3.setProductName("茉莉蜜茶");
		p3.setUnitPrice(3.0d);
		p3.setCreateTime(date);
		p3.setUpdateTime(date);
		p3.setDividend(null);
	this.merge(p1);
	this.merge(p2);
	this.merge(p3);

生成的关系如下:

mysql> show create table wxsc_product;
+--------------+-------------------------------------------------------------------------------------------------------------------
| Table        | Create Table
+--------------+-------------------------------------------------------------------------------------------------------------------
| wxsc_product | CREATE TABLE `wxsc_product` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `createTime` datetime NOT NULL,
  `updateTime` datetime NOT NULL,
  `version` int(11) NOT NULL,
  `article_number` varchar(255) DEFAULT NULL,
  `order_quantity` int(11) DEFAULT NULL,
  `product_attribute` varchar(255) DEFAULT NULL,
  `product_name` varchar(255) DEFAULT NULL,
  `unit_price` double DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
+--------------+-------------------------------------------------------------------------------------------------------------------
1 row in set (0.00 sec)

mysql> show create table wxsc_dividend;
+---------------+------------------------------------------------------------------------------------------------------------------
| Table         | Create Table
+---------------+------------------------------------------------------------------------------------------------------------------
| wxsc_dividend | CREATE TABLE `wxsc_dividend` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `createTime` datetime NOT NULL,
  `updateTime` datetime NOT NULL,
  `version` int(11) NOT NULL,
  `attribute` varchar(255) DEFAULT NULL,
  `dividend_name` varchar(255) DEFAULT NULL,
  `dividend_number` varchar(255) DEFAULT NULL,
  `quantity` int(11) NOT NULL,
  `product_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FKF06C177DE93A980F` (`product_id`),
  CONSTRAINT `FKF06C177DE93A980F` FOREIGN KEY (`product_id`) REFERENCES `wxsc_product` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
+---------------+------------------------------------------------------------------------------------------------------------------
1 row in set (0.00 sec)

mysql>

插入数据试试看。结果如下:



mysql> select * from wxsc_product;
+----+---------------------+---------------------+---------+----------------+----------------+-------------------+--------------+------------+
| id | createTime          | updateTime          | version | article_number | order_quantity | product_attribute | product_name | unit_price |
+----+---------------------+---------------------+---------+----------------+----------------+-------------------+--------------+------------+
|  1 | 2014-04-05 16:58:53 | 2014-04-05 16:58:53 |       0 | 03558866-24-22 |              0 | 湖南纸业出品      | 卫生纸       |      14.32 |
|  2 | 2014-04-05 16:58:53 | 2014-04-05 16:58:53 |       0 | 0694412548522  |              0 | 广东阳江          | 水果刀       |        6.5 |
|  3 | 2014-04-05 16:58:53 | 2014-04-05 16:58:53 |       0 | 8754515484522  |              0 | 广州经济开发区    | 茉莉蜜茶     |          3 |
+----+---------------------+---------------------+---------+----------------+----------------+-------------------+--------------+------------+
3 rows in set (0.00 sec)

mysql> select * from wxsc_dividend;
+----+---------------------+---------------------+---------+-----------+---------------+-----------------+----------+------------+
| id | createTime          | updateTime          | version | attribute | dividend_name | dividend_number | quantity | product_id |
+----+---------------------+---------------------+---------+-----------+---------------+-----------------+----------+------------+
|  1 | 2014-04-05 16:58:53 | 2014-04-05 16:58:53 |       0 | 玩具类    | 赠品:自行车   | 484545488       |        2 |       NULL |
|  2 | 2014-04-05 16:58:53 | 2014-04-05 16:58:53 |       0 | 玩具类    | 赠品:自行车   | 484545488       |        2 |       NULL |
+----+---------------------+---------------------+---------+-----------+---------------+-----------------+----------+------------+
2 rows in set (0.00 sec)

mysql>

结果还是一样的。

eclipse生成如下的 Hibernate SQL 语句:

正在构造一些假数据.
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Product
        */ insert 
        into
            wxsc_product
            (createTime, updateTime, version, article_number, order_quantity, product_attribute, product_name, unit_price) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Dividend
        */ insert 
        into
            wxsc_dividend
            (createTime, updateTime, version, attribute, dividend_name, dividend_number, product_id, quantity) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Product
        */ insert 
        into
            wxsc_product
            (createTime, updateTime, version, article_number, order_quantity, product_attribute, product_name, unit_price) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Dividend
        */ insert 
        into
            wxsc_dividend
            (createTime, updateTime, version, attribute, dividend_name, dividend_number, product_id, quantity) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Product
        */ insert 
        into
            wxsc_product
            (createTime, updateTime, version, article_number, order_quantity, product_attribute, product_name, unit_price) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Subscriber
        */ insert 
        into
            wxsc_subscriber
            (createTime, updateTime, version, city, country, headimgurl, language, local_headimg_url, nickname, open_id, parent_subscriber_id, payment_type, province, sex, subscribe_number, subscribe_time, telephone_number) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Subscriber
        */ insert 
        into
            wxsc_subscriber
            (createTime, updateTime, version, city, country, headimgurl, language, local_headimg_url, nickname, open_id, parent_subscriber_id, payment_type, province, sex, subscribe_number, subscribe_time, telephone_number) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Subscriber
        */ insert 
        into
            wxsc_subscriber
            (createTime, updateTime, version, city, country, headimgurl, language, local_headimg_url, nickname, open_id, parent_subscriber_id, payment_type, province, sex, subscribe_number, subscribe_time, telephone_number) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Subscriber
        */ insert 
        into
            wxsc_subscriber
            (createTime, updateTime, version, city, country, headimgurl, language, local_headimg_url, nickname, open_id, parent_subscriber_id, payment_type, province, sex, subscribe_number, subscribe_time, telephone_number) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Subscriber
        */ insert 
        into
            wxsc_subscriber
            (createTime, updateTime, version, city, country, headimgurl, language, local_headimg_url, nickname, open_id, parent_subscriber_id, payment_type, province, sex, subscribe_number, subscribe_time, telephone_number) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)




可见外键没参照到product表。这是因为写java代码的时候不可以继续使用上面那段了

//p1.setDividend(dividend); 特别说明:这种写法只适用于 product参照dividend表的情况下使用。如果参照关系反过来了。就要使用 dividend.setDividend(p1);

还有特别注意一个规律:

只要是mappBy=“product”
如果改成下面的Java语句试试看。参照关系仍然是 product 参照 dividend 





/***************************************************************************************************************************************************/

/*******************                           情况 1,2,3   之情况3(双向)       ------- 回到最初【让 Product 做主表去参照 Dividend】

/***************************************************************************************************************************************************/

set对象关系的时候一定要记住两个事情:
1.谁做主表?
2.单向还是双向映射?如果是双向就要两个对象都要互相set对方。这样级联更新的时候结果才是正确的。




@Entity
@Table(name="wxsc_product")
public class Product extends EntitySupport{

	@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
	@JoinColumn(name="dividend_id",referencedColumnName="id")//我让 Product 做主表去参照 Dividend 
	private Dividend dividend;//赠品


@Entity
@Table(name="wxsc_dividend")
public class Dividend extends EntitySupport {

	@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="dividend")
	private Product product;



以及:

       Dividend dividend = new Dividend();
		dividend.setAttribute("玩具类");
		//dividend.setDividendId("DJFOIWEFILDJFOWFEjo-DJFWOE");
		dividend.setDividendName("赠品:自行车");
		dividend.setDividendNumber("484545488");
		dividend.setQuantity(2);
		dividend.setCreateTime(date);
		dividend.setUpdateTime(date);
	
	//下面让这两个商品p1,p2都赠送这一个赠品,另外一个商品p3则没有赠品
	Product p1 = new Product();
		p1.setArticleNumber("03558866-24-22");
		p1.setProductAttribute("湖南纸业出品");
		p1.setProductName("卫生纸");
		p1.setUnitPrice(14.32d);
		p1.setCreateTime(date);
		p1.setUpdateTime(date);
		p1.setDividend(dividend);
	Product p2 = new Product();
		p2.setArticleNumber("0694412548522");
		p2.setProductAttribute("广东阳江");
		p2.setProductName("水果刀");
		p2.setUnitPrice(6.5d);
		p2.setCreateTime(date);
		p2.setUpdateTime(date);
		p2.setDividend(dividend);
	
	Product p3 = new Product();
		p3.setArticleNumber("8754515484522");
		p3.setProductAttribute("广州经济开发区");
		p3.setProductName("茉莉蜜茶");
		p3.setUnitPrice(3.0d);
		p3.setCreateTime(date);
		p3.setUpdateTime(date);
		p3.setDividend(null);
	
	//与上面的区别就是多加了下面这两句.
	dividend.setProduct(p1);
	dividend.setProduct(p2);

	this.merge(p1);
	this.merge(p2);
	this.merge(p3);

生成的关系如下:

mysql> show create table wxsc_product;
+--------------+-----------------------------------------------------------------------------------------------------
| Table        | Create Table
+--------------+-----------------------------------------------------------------------------------------------------
| wxsc_product | CREATE TABLE `wxsc_product` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `createTime` datetime NOT NULL,
  `updateTime` datetime NOT NULL,
  `version` int(11) NOT NULL,
  `article_number` varchar(255) DEFAULT NULL,
  `order_quantity` int(11) DEFAULT NULL,
  `product_attribute` varchar(255) DEFAULT NULL,
  `product_name` varchar(255) DEFAULT NULL,
  `unit_price` double DEFAULT NULL,
  `dividend_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FKEC59DBA19367CD45` (`dividend_id`),
  CONSTRAINT `FKEC59DBA19367CD45` FOREIGN KEY (`dividend_id`) REFERENCES `wxsc_dividend` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=gbk |
+--------------+-----------------------------------------------------------------------------------------------------
1 row in set (0.00 sec)

mysql> show create table wxsc_dividend;
+---------------+----------------------------------------------------------------------------------------------------
| Table         | Create Table
+---------------+----------------------------------------------------------------------------------------------------
| wxsc_dividend | CREATE TABLE `wxsc_dividend` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `createTime` datetime NOT NULL,
  `updateTime` datetime NOT NULL,
  `version` int(11) NOT NULL,
  `attribute` varchar(255) DEFAULT NULL,
  `dividend_name` varchar(255) DEFAULT NULL,
  `dividend_number` varchar(255) DEFAULT NULL,
  `quantity` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gbk |
+---------------+----------------------------------------------------------------------------------------------------
1 row in set (0.00 sec)

mysql>

插入的数据如下:

mysql> select * from wxsc_product;
+----+---------------------+---------------------+---------+----------------+----------------+-------------------+--------------+------------+-------------+
| id | createTime          | updateTime          | version | article_number | order_quantity | product_attribute | product_name | unit_price | dividend_id |
+----+---------------------+---------------------+---------+----------------+----------------+-------------------+--------------+------------+-------------+
|  1 | 2014-04-05 17:33:59 | 2014-04-05 17:33:59 |       0 | 0694412548522  |              0 | 广东阳江          | 水果刀       |        6.5 |           1 |
|  2 | 2014-04-05 17:33:59 | 2014-04-05 17:33:59 |       0 | 03558866-24-22 |              0 | 湖南纸业出品      | 卫生纸       |      14.32 |           1 |
|  3 | 2014-04-05 17:33:59 | 2014-04-05 17:33:59 |       0 | 0694412548522  |              0 | 广东阳江          | 水果刀       |        6.5 |           2 |
|  4 | 2014-04-05 17:33:59 | 2014-04-05 17:33:59 |       0 | 8754515484522  |              0 | 广州经济开发区    | 茉莉蜜茶     |          3 |        NULL |
+----+---------------------+---------------------+---------+----------------+----------------+-------------------+--------------+------------+-------------+
4 rows in set (0.00 sec)

mysql> select * from wxsc_dividend;
+----+---------------------+---------------------+---------+-----------+---------------+-----------------+----------+
| id | createTime          | updateTime          | version | attribute | dividend_name | dividend_number | quantity |
+----+---------------------+---------------------+---------+-----------+---------------+-----------------+----------+
|  1 | 2014-04-05 17:33:59 | 2014-04-05 17:33:59 |       0 | 玩具类    | 赠品:自行车   | 484545488       |        2 |
|  2 | 2014-04-05 17:33:59 | 2014-04-05 17:33:59 |       0 | 玩具类    | 赠品:自行车   | 484545488       |        2 |
+----+---------------------+---------------------+---------+-----------+---------------+-----------------+----------+
2 rows in set (0.00 sec)

mysql>



太悲剧了。更加乱。


eclipse的输出如下:

正在构造一些假数据.
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Dividend
        */ insert 
        into
            wxsc_dividend
            (createTime, updateTime, version, attribute, dividend_name, dividend_number, quantity) 
        values
            (?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Product
        */ insert 
        into
            wxsc_product
            (createTime, updateTime, version, article_number, dividend_id, order_quantity, product_attribute, product_name, unit_price) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Product
        */ insert 
        into
            wxsc_product
            (createTime, updateTime, version, article_number, dividend_id, order_quantity, product_attribute, product_name, unit_price) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Dividend
        */ insert 
        into
            wxsc_dividend
            (createTime, updateTime, version, attribute, dividend_name, dividend_number, quantity) 
        values
            (?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Product
        */ insert 
        into
            wxsc_product
            (createTime, updateTime, version, article_number, dividend_id, order_quantity, product_attribute, product_name, unit_price) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Product
        */ insert 
        into
            wxsc_product
            (createTime, updateTime, version, article_number, dividend_id, order_quantity, product_attribute, product_name, unit_price) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Subscriber
        */ insert 
        into
            wxsc_subscriber
            (createTime, updateTime, version, city, country, headimgurl, language, local_headimg_url, nickname, open_id, parent_subscriber_id, payment_type, province, sex, subscribe_number, subscribe_time, telephone_number) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Subscriber
        */ insert 
        into
            wxsc_subscriber
            (createTime, updateTime, version, city, country, headimgurl, language, local_headimg_url, nickname, open_id, parent_subscriber_id, payment_type, province, sex, subscribe_number, subscribe_time, telephone_number) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Subscriber
        */ insert 
        into
            wxsc_subscriber
            (createTime, updateTime, version, city, country, headimgurl, language, local_headimg_url, nickname, open_id, parent_subscriber_id, payment_type, province, sex, subscribe_number, subscribe_time, telephone_number) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Subscriber
        */ insert 
        into
            wxsc_subscriber
            (createTime, updateTime, version, city, country, headimgurl, language, local_headimg_url, nickname, open_id, parent_subscriber_id, payment_type, province, sex, subscribe_number, subscribe_time, telephone_number) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Subscriber
        */ insert 
        into
            wxsc_subscriber
            (createTime, updateTime, version, city, country, headimgurl, language, local_headimg_url, nickname, open_id, parent_subscriber_id, payment_type, province, sex, subscribe_number, subscribe_time, telephone_number) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)




/***************************************************************************************************************************************************/

/*******************                           情况 1,2,3   之情况4(双向)       ------- 回到最初【让 Product 做主表去参照 Dividend】

/***************************************************************************************************************************************************/

我再次修改java语句为:


	Date date = new Date();
	Dividend dividend = new Dividend();
		dividend.setAttribute("玩具类");
		//dividend.setDividendId("DJFOIWEFILDJFOWFEjo-DJFWOE");
		dividend.setDividendName("赠品:自行车");
		dividend.setDividendNumber("484545488");
		dividend.setQuantity(2);
		dividend.setCreateTime(date);
		dividend.setUpdateTime(date);
	
	//下面让这两个商品p1,p2都赠送这一个赠品,另外一个商品p3则没有赠品
	Product p1 = new Product();
		p1.setArticleNumber("03558866-24-22");
		p1.setProductAttribute("湖南纸业出品");
		p1.setProductName("卫生纸");
		p1.setUnitPrice(14.32d);
		p1.setCreateTime(date);
		p1.setUpdateTime(date);
		p1.setDividend(dividend);
	Product p2 = new Product();
		p2.setArticleNumber("0694412548522");
		p2.setProductAttribute("广东阳江");
		p2.setProductName("水果刀");
		p2.setUnitPrice(6.5d);
		p2.setCreateTime(date);
		p2.setUpdateTime(date);
		p2.setDividend(dividend);
	
	Product p3 = new Product();
		p3.setArticleNumber("8754515484522");
		p3.setProductAttribute("广州经济开发区");
		p3.setProductName("茉莉蜜茶");
		p3.setUnitPrice(3.0d);
		p3.setCreateTime(date);
		p3.setUpdateTime(date);
		p3.setDividend(null);
	
	dividend.setProduct(p1);
	dividend.setProduct(p2);
	
	this.merge(dividend);

得到如下数据:


mysql> select * from wxsc_product;
+----+---------------------+---------------------+---------+----------------+----------------+-------------------+--------------+------------+-------------+
| id | createTime          | updateTime          | version | article_number | order_quantity | product_attribute | product_name | unit_price | dividend_id |
+----+---------------------+---------------------+---------+----------------+----------------+-------------------+--------------+------------+-------------+
|  1 | 2014-04-05 17:41:58 | 2014-04-05 17:41:58 |       0 | 0694412548522  |              0 | 广东阳江          | 水果刀       |        6.5 |           1 |
+----+---------------------+---------------------+---------+----------------+----------------+-------------------+--------------+------------+-------------+
1 row in set (0.00 sec)

mysql> select * from wxsc_dividend;
+----+---------------------+---------------------+---------+-----------+---------------+-----------------+----------+
| id | createTime          | updateTime          | version | attribute | dividend_name | dividend_number | quantity |
+----+---------------------+---------------------+---------+-----------+---------------+-----------------+----------+
|  1 | 2014-04-05 17:41:58 | 2014-04-05 17:41:58 |       0 | 玩具类    | 赠品:自行车   | 484545488       |        2 |
+----+---------------------+---------------------+---------+-----------+---------------+-----------------+----------+
1 row in set (0.00 sec)

mysql>

可见这样做更加错。




后台eclipse的输出是:

正在构造一些假数据.
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Dividend
        */ insert 
        into
            wxsc_dividend
            (createTime, updateTime, version, attribute, dividend_name, dividend_number, quantity) 
        values
            (?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Product
        */ insert 
        into
            wxsc_product
            (createTime, updateTime, version, article_number, dividend_id, order_quantity, product_attribute, product_name, unit_price) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Subscriber
        */ insert 
        into
            wxsc_subscriber
            (createTime, updateTime, version, city, country, headimgurl, language, local_headimg_url, nickname, open_id, parent_subscriber_id, payment_type, province, sex, subscribe_number, subscribe_time, telephone_number) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Subscriber
        */ insert 
        into
            wxsc_subscriber
            (createTime, updateTime, version, city, country, headimgurl, language, local_headimg_url, nickname, open_id, parent_subscriber_id, payment_type, province, sex, subscribe_number, subscribe_time, telephone_number) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Subscriber
        */ insert 
        into
            wxsc_subscriber
            (createTime, updateTime, version, city, country, headimgurl, language, local_headimg_url, nickname, open_id, parent_subscriber_id, payment_type, province, sex, subscribe_number, subscribe_time, telephone_number) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Subscriber
        */ insert 
        into
            wxsc_subscriber
            (createTime, updateTime, version, city, country, headimgurl, language, local_headimg_url, nickname, open_id, parent_subscriber_id, payment_type, province, sex, subscribe_number, subscribe_time, telephone_number) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    /* insert com.kington.wxsc.model.db.shop.Subscriber
        */ insert 
        into
            wxsc_subscriber
            (createTime, updateTime, version, city, country, headimgurl, language, local_headimg_url, nickname, open_id, parent_subscriber_id, payment_type, province, sex, subscribe_number, subscribe_time, telephone_number) 
        values
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)






/***************************************************************************************************************************************************/

/*******************                                                   情况 4,5,6    之情况4                                    **********************/

/***************************************************************************************************************************************************/


这个情况可以忽略。




分享到:
评论

相关推荐

    Hibernate+中文文档

    22.2. Hibernate 映射 22.3. Hibernate 代码 23. 示例:复杂映射实例 23.1. Employer(雇主)/Employee(雇员) 23.2. Author(作家)/Work(作品) 23.3. Customer(客户)/Order(订单)/Product(产品) 23.4. 杂例 ...

    Hibernate实战(第2版 中文高清版)

    第一部分 从Hibernate和EJB 3.0开始  第1章 理解对象/关系持久化   1.1 什么是持久化   1.1.1 关系数据库   1.1.2 理解SQL   1.1.3 在Java中使用SQL   1.1.4 面向对象应用程序中的持久化   1.2 范式不...

    hibernate3.2中文文档(chm格式)

    22.2. Hibernate 映射 22.3. Hibernate 代码 23. 示例:复杂映射实例 23.1. Employer(雇主)/Employee(雇员) 23.2. Author(作家)/Work(作品) 23.3. Customer(客户)/Order(订单)/Product(产品) 23.4. 杂例 ...

    HibernateAPI中文版.chm

    22.2. Hibernate 映射 22.3. Hibernate 代码 23. 示例:复杂映射实例 23.1. Employer(雇主)/Employee(雇员) 23.2. Author(作家)/Work(作品) 23.3. Customer(客户)/Order(订单)/Product(产品) 23.4. 杂例 ...

    Hibernate中文详细学习文档

    22.2. Hibernate 映射 22.3. Hibernate 代码 23. 示例:复杂映射实例 23.1. Employer(雇主)/Employee(雇员) 23.2. Author(作家)/Work(作品) 23.3. Customer(客户)/Order(订单)/Product(产品) 23.4. 杂例 ...

    Hibernate 中文 html 帮助文档

    22.2. Hibernate 映射 22.3. Hibernate 代码 23. 示例:复杂映射实例 23.1. Employer(雇主)/Employee(雇员) 23.2. Author(作家)/Work(作品) 23.3. Customer(客户)/Order(订单)/Product(产品) 23.4. 杂例 23.4.1. ...

    hibernate 体系结构与配置 参考文档(html)

    部署与测试 1.5. 总结 2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2. 获得...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    22.2. Hibernate 映射 22.3. Hibernate 代码 23. 示例:复杂映射实例 23.1. Employer(雇主)/Employee(雇员) 23.2. Author(作家)/Work(作品) 23.3. Customer(客户)/Order(订单)/Product(产品) 23.4. 杂例 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和...

    Hibernate参考文档

    2. 版权声明 1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class ...22.2. Hibernate 映射 22.3. Hibernate 代码 23. 示例:复杂映射实例 ……………………

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和...

    OnlileExaminationSpringHibernate

    在线考试SpringHibernate有关该计划的信息:该项目旨在同时为学生和老师提供一个在线门户,以便定期的课堂测试相应的结果发布过程变为在线考试材料供应:教师可以登录(如果没有帐户,则可以注册)并添加主题以发布...

    spring3.2+strut2+hibernate4

    --此处hibernate 的映射采用的是.xml 配置则应设置为:class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”--> <property name="dataSource" ref="dataSource" /> <prop key="...

    OA系统的毕业设计的毕业论文

    5.2.1 创建并配置Hibernate映射文件 37 5.2.2 开发并配置Hibernate DAO层 38 5.3 控制层Struts实现 38 5.3.1 开发Struts核心流程代码 38 5.3.2 开发JSP页面原型 40 5.3.3 增加表单校验功能 40 5.3.4 调用DAO组件操作...

    javafx11-jpa-crud:带有Hibernate的JavaFX和JPA(Java持久性API)技术的演示项目

    一切都是根据不断出现的需求来完成的,尽管我知道最终的结果将不是一个令人难以置信的项目,但我已经为自己的发展感到自豪。实施细节实施中使用的技术: JavaFX:用于使用Java图形界面开发应用程序的库; JPA:用于...

    iBATIS实战

    4.4 使用内联结果映射和显式结果映射 78 4.4.1 基本类型结果 79 4.4.2 JavaBean结果和Map结果 81 4.5 小结 81 第5章 执行非查询语句 82 5.1 更新数据的基本方法 82 5.1.1 用于非查询SQL语句的SqlMap API 82 5.1.2 ...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和...

    基于Java的支教信息共享系统设计与实现.docx

    27 6.1 测试目的 27 6.2 测试方案 27 6.3 用户登录模块的测试用例及结果 27 6.4 管理员管理模块的用例和结果 28 6.5 本章小结 29 结 论 31 致 谢 33 参考文献 35 摘 要 随着社会的不断进步,志愿服务也逐渐的被广大...

    SqlToolBox 1.8.2

    用户能自动快速获取单表的创建,查询,更新,删除,建表语句,整表全部数据插入语句,单表对应Pojo类和单表的Hibernate映射文件等常用文字,且可借此构造更复杂的Sql语句。 4. 能执行Sql语句并显示执行结果,如果是...

Global site tag (gtag.js) - Google Analytics