数据库映射只@OneToMany的两个区别

========================== (不加referencedColumnName的时候) ==================
[/code]

@JoinColumn(name="dividend_id")的情况

[code="java"]
@Entity
@Table(name="wxsc_order")
public class Order extends EntitySupport {

private static final long serialVersionUID = 1L;

@Column(name="order_id")
private String orderId;//订单号

@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)//让Dividend去维护外键关系
@JoinColumn(name="dividend_id")
private Dividend dividend;//赠品





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

private static final long serialVersionUID = 1L;

@Column(name="dividend_id")
private String dividendId;//赠品ID

@Column(name="dividend_name")
private String dividendName;//赠品名称

@Column(name="dividend_number")
private String dividendNumber;//赠品编号

private String attribute;//赠品属性

private int quantity;//数量

@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="dividend")//让这个外键生成到order表当中。
@JoinColumn(name="order_id")
private Order order;



其映射的关系如下:



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_id` 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 DEFAULT CHARSET=utf8


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_id` 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 DEFAULT CHARSET=utf8
[code="java"]







加了referencedColumnName之后
@JoinColumn(name="dividend_id",referencedColumnName="dividendId")
的情况







@Entity
@Table(name="wxsc_order")
public class Order extends EntitySupport {

private static final long serialVersionUID = 1L;

@Column(name="order_id")
private String orderId;//订单号

@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)//让Dividend去维护外键关系
@JoinColumn(name="dividend_id",referencedColumnName="dividend_id")
private Dividend dividend;//赠品





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

private static final long serialVersionUID = 1L;

@Column(name="dividend_id")
private String dividendId;//赠品ID

@Column(name="dividend_name")
private String dividendName;//赠品名称

@Column(name="dividend_number")
private String dividendNumber;//赠品编号

private String attribute;//赠品属性

private int quantity;//数量

@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="dividend")//让这个外键生成到order表当中。
@JoinColumn(name="order_id",referencedColumnName="order_id")
private Order order;




注意:如果赠品是写成(不加@JoinColumn的情况):
private String dividendId;//赠品ID

这个时候映射的时候就应该写成:
@JoinColumn(name="dividend_id",referencedColumnName="dividendId")
private Dividend dividend;//赠品

如果赠品是写成:
@Column(name="dividend_id")
private String dividendId;//赠品ID

这个时候映射的时候就应该写成:
@JoinColumn(name="dividend_id",referencedColumnName="dividend_id")
private Dividend dividend;//赠品

这两个第一个是给每取名字的取名字,取了名字的就叫名字。
第二个referencedColumnName就是指定这个关系是要映射到对方那个表的哪个字段上去的。




两边都加了 referencedColumnName 的时候结果如下:



mysql> show 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_id` varchar(255) DEFAULT NULL,
`dividend_name` varchar(255) DEFAULT NULL,
`dividend_number` varchar(255) DEFAULT NULL,
`quantity` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `dividend_id` (`dividend_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec)

mysql> show create table wxsc_order;
CREATE TABLE `wxsc_order` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`createTime` datetime NOT NULL,
`updateTime` datetime NOT NULL,
`version` int(11) NOT NULL,
`consumer_remarks` longtext,
`delivery_time` datetime DEFAULT NULL,
`express_number` varchar(255) DEFAULT NULL,
`freight_amount` float DEFAULT NULL,
`invoice` varchar(255) DEFAULT NULL,
`invoice_content` longtext,
`invoice_head` longtext,
`invoice_type` int(11) DEFAULT NULL,
`order_id` varchar(255) DEFAULT NULL,
`order_state` int(11) DEFAULT NULL,
`order_time` datetime DEFAULT NULL,
`payment_confirm_time` datetime DEFAULT NULL,
`payment_time` datetime DEFAULT NULL,
`seller_remarks` longtext,
`total_sum` float DEFAULT NULL,
`dividend_id` varchar(255) DEFAULT NULL,
`subscriber_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `order_id` (`order_id`),
KEY `FKD5D59A802C2E77E7` (`subscriber_id`),
KEY `FKD5D59A804768DDC7` (`dividend_id`),
CONSTRAINT `FKD5D59A804768DDC7` FOREIGN KEY (`dividend_id`) REFERENCES `wxsc_dividend` (`dividend_id`),
CONSTRAINT `FKD5D59A802C2E77E7` FOREIGN KEY (`subscriber_id`) REFERENCES `wxsc_subscriber` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值