`

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

    博客分类:
  • JAVA
 
阅读更多


========================== (不加referencedColumnName的时候) ==================


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

@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







加了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)

分享到:
评论

相关推荐

    HIBERNATE 一对多 onetomany

    基于HIBERNATE 操作表的关系练习例子

    onetomany-hibernate

    onetomany-hibernate在myeclipse下的使用开发hibernate程序

    Hibernate one to many(many to one) 配置

    NULL 博文链接:https://fqh1987.iteye.com/blog/791845

    Hibernate_Annotation关联映射

    通过关联表来保存两个实体之间的连接关系(要模拟一对一关联必须在每一个外键上添加唯一约束)。 1.共享主键的一对一关联映射: @Entity @Table(name="Test_Body") public class Body { private Integer id; ...

    demo-onetomany-nosql:与OneToMany关系中的MongoDB的Spring Data演示项目

    一对多Nosql演示与OneToMany关系中的MongoDB的Spring Data演示项目 该项目是我发表的文章的来源。 请以下文章的链接:

    JPA_OneToMany学习教程

    JPA_OneToMany学习教程JPA_OneToMany学习教程JPA_OneToMany学习教程JPA_OneToMany学习教程

    Hibernate注释

    一对多 @OneToMany 注解可定义一对多关联。一对多关联可以是双向的。 双向 规范中多对一端几乎总是双向关联中的主体(owner)端,而一对多的关联注解为 @OneToMany(mappedBy=)

    JPA 标注 JPA标签手册

    o @OneToMany o @OneToOne o @OrderBy • P o @PersistenceContext o @PersistenceContexts o @PersistenceProperty o @PersistenceUnit o @PersistenceUnits o @PrimaryKeyJoinColumn o @PrimaryKeyJoinColumns • ...

    重新查询:重新查询-Java Kotlin Android的基于现代SQL的查询和持久性

    可以轻松地映射到数据库或创建数据库,从使用Java的任何平台执行查询和更新。 例子 从抽象类定义实体: @Entity abstract class AbstractPerson { @Key @Generated int id; @Index ( " name_index " ) // table...

    Hibernate注释大全收藏

    上述代码在 "month" 和 "day" 两个 field 上加上 unique constrainst. @Version 注解用于支持乐观锁版本控制。 @Entity public class Flight implements Serializable { ... @Version @Column(name="OPTLOCK") ...

    Hibernate_Course

    Hibernate课程 在这个资料库中,我尝试学习Hibernate 话题 简单的结局 预先映射 @OneToOne @OneToMany @多多 提取类型 懒惰的 渴望的

    数据库培训sql课堂操作记录

    数据库培训,教师的课堂操作记录,附带联系及答案。 10个课时,快速掌握sql 当时老师讲的比较不错,很通俗。...附:最后讲了下对象关系映射,一个对象映射数据库中的数据: ManyToMany OneToMany OnToOne

    Hibernate注解

    * columnDefinition 可选,为这个特定列覆盖sql ddl片段(这可能导致无法在不同数据库间移植) * table 可选,定义对应的表(默认为主表) * length 可选,列长度(默认值255) * precision 可选,列十进制精度...

    SDAprojectConsoleVer

    SDA项目控制台版本 描述 程序的概念和想法解决了在线买卖商品的问题,而没有冒着买卖双方的包裹损失...一个用户可以拥有许多产品(@OneToMany认证); 由user_id映射; 登录是一个单独的表,用于添加新用户的凭据。

    播种的类型::seedling:一种将测试数据播种到数据库中的令人愉快的方法

    只需为您的实体(模型)和种子脚本创建一个实体工厂。实体首先创建您的TypeORM实体。 // user.entity.ts@ Entity ( )export class User { @ PrimaryGeneratedColumn ( 'uuid' ) id : string @ Column ( { nullable ...

    BOS 技术整理

    @OneToMany(mappedBy 相当于 inverse ) @ManyToOne 结合 @JoinColumn 添加一列外键 @ManyToMany 一方写 mappedBy 放弃外键维护、另一方 @JoinTable 维护中间表 收派标准修添加能实现 html 请求 后台...

    hibernate对象三状态及OneToOne&OneToMany&ManyToMany

    hibernate对象三状态及OneToOne&OneToMany&ManyToMany讲解,代码示例,数据库示例!非常全面

    电子商务:Spring Boot电子商务项目示例

    *安装在GitHub上克隆项目: git clone git@github.com:suilan/ecommerce.git要运行数据库: docker-compose up在后端文件夹中: mvn compile && mvn package在前端文件夹中: npm install跑要运行后端: java -jar ...

    hibernat面试题

    双向 @OneToMany(mappeBy="") 关系交给对方维护 3多对多 @ManyToMany-->代表多对多 @ManyToMany(mappeBy="")mappeBy-->通过此属性把关系交给对方维 注意:一般出现多对多的情况时,我们会把多对多分解成2个一对...

    ejb.rar_EJB onetomany_ejb

    EJB基本知识介绍。如OneToOne,OneToMany等经典实例推荐

Global site tag (gtag.js) - Google Analytics