`

数据库映射只@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对象三状态及OneToOne&OneToMany&ManyToMany

    在数据库设计中,一对一关系意味着两个实体表之间存在唯一映射。在Hibernate中,可以通过@OneToOne注解来实现这种关系。例如: ```java @Entity public class User { @Id private Long id; @OneToOne(mappedBy...

    HIBERNATE 一对多 onetomany

    在Hibernate的XML配置文件中,你需要为这两个实体定义对应的映射。每个实体需要一个`<class>`标签,其中包含实体的类名和表名。在`<class>`标签内,你可以定义属性的映射,如主键、属性到列的映射等。 **保存和查询...

    Hibernate one to many(many to one) 配置

    描述中提到的"博文链接:https://fqh1987.iteye.com/blog/791845"可能指向一篇详细讲解这两个概念的文章,但由于信息有限,我们无法直接查看具体内容,所以我们将基于普遍知识进行解释。 **知识详解** 1. **...

    hibernate注解处理映射关系共14页.pdf.zip

    《Hibernate注解处理映射关系》是一份深入探讨Hibernate框架中注解应用的教程,共有14页内容,旨在帮助开发者更好地理解和运用Hibernate在数据库映射中的注解技术。Hibernate作为Java领域广泛使用的对象关系映射...

    JPA_OneToMany学习教程

    双向关联需要维护好两个方向的引用,以保持数据一致性。 6. **单向关联**:与双向关联相比,单向关联只在父实体上使用@OneToMany注解,而子实体没有相应的引用。这种关联更简单,但查询和更新操作可能需要额外的SQL...

    Hibernate 注解一对多,多对一

    本文将深入探讨Hibernate中的两个关键概念——注解声明的一对多(@OneToMany)和多对一(@ManyToOne)关系,以及如何在实际项目中应用它们。 一、Hibernate注解介绍 Hibernate通过注解简化了Java类与数据库表之间的...

    JPA课程manyToMany OneToMany 等全部测试

    在数据库设计中,`ManyToMany`关系表示两个实体之间存在多对多的关系。例如,学生可以选修多门课程,而课程也可以被多个学生选修。在JPA中,我们可以使用`@ManyToMany`注解来定义这种关系。这个注解通常需要配合`@...

    hibernate数据库映射例子.zip

    《hibernate数据库映射例子.zip》这个压缩包包含了几个基于Hibernate框架的数据库映射示例,旨在帮助初学者理解并掌握如何在实际项目中应用Hibernate进行数据持久化操作。Hibernate是一个强大的Java对象关系映射...

    hibernate的多种映射关系

    一对一映射表示两个实体类之间存在唯一的关系,就像一个人只能有一个身份证。在 Hibernate 中,这可以通过在两个实体类中添加 `@OneToOne` 注解实现。此外,还可以使用 `@PrimaryKeyJoinColumn` 或 `@JoinColumn` ...

    jpa的实体映射关系7种

    在Java Persistence API (JPA) 中,实体映射关系是数据库关系模型与Java对象模型之间的桥梁,用于在ORM(对象关系映射)框架下管理数据。JPA 提供了多种映射关系,使得开发者能够方便地处理不同类型的关联。下面我们...

    JAVA数据类型与Hibernate的类型映射

    通过在实体类上使用@Entity注解,并使用@Id注解指定主键字段,可以将一个Java类映射到数据库的一张表。字段则通过@Column注解来指定列名和属性,如长度、是否可为空等。 在处理NULL值时,Hibernate提供了可选的...

    hibernate双向一对多关联映射(注解版)

    1. **定义实体类**:首先,我们需要创建两个实体类,例如`Parent`和`Child`。在`Parent`类中,`Child`是一个集合,而在`Child`类中,`Parent`是一个单个对象。 2. **在父类中添加@OneToMany注解**:在`Parent`类的`...

    Hibernate教程20_关系映射案例三

    8. **懒加载和急加载**:Hibernate提供了两种加载策略,懒加载(Lazy Loading)只在真正需要关联对象时才去数据库获取,而急加载(Eager Loading)则会在加载主对象时一起加载关联对象。通常使用`@OneToMany(fetch =...

    hibernate set 集合映射

    3. **关联映射**:集合映射通常涉及到两个实体之间的关联,如一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)关系。 4. **集合属性映射**:在实体类中,集合属性需要使用...

    Hibernate集合映射与关联关系

    对于"student与Score的Map集合关系",在Hibernate配置文件中,我们需要定义两个实体(Student和Score),并在Student实体中声明一个Map类型属性,用于存储Score对象。映射关系可以通过`@OneToMany`和`@ManyToOne`...

    Hibernate映射实例

    在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系映射)工具,它允许开发者用面向对象的方式来处理数据库操作。本实例主要探讨了Hibernate中的三种基本映射关系:一对一、一对多以及多对多,并且是...

    hibernate关联映射详解SSH 多对多,一对多关系对象映射

    在数据库中,多对多关系表示两个表中的记录都可以相互关联。在Hibernate中,这通常通过中间表(或关联表)来实现,使用`@ManyToMany`注解。例如,一个学生可以选修多门课程,一门课程也可以被多个学生选修: ```...

    一对多单向和双向映射

    **双向映射**则意味着两个实体都知晓彼此的关系。在用户和订单的例子中,如果用户也需要查看其所有的订单,那么就需要在User类中也添加一个Order的集合属性。这通常会使用@OneToMany和@ManyToOne的组合,以及@...

    Android数据库框架-----ORMLite关联表的使用

    关联表是指在数据库设计中,两个或多个表之间存在的一种联系。在ORMLite中,我们可以利用`@OneToOne`、`@OneToMany`、`@ManyToOne`和`@ManyToMany`注解来处理这些关联。这些注解分别表示一对一、一对多、多对一和多...

    hibernate一对多关联映射(单向关联)

    首先,我们需要在两个实体类中定义对应的属性和getter、setter方法。假设我们有User类(父实体)和Order类(子实体): ```java // User.java public class User { private Long id; private String username; /...

Global site tag (gtag.js) - Google Analytics