工作中遇到的问题--Hibernate注解添加在一方和多方的区别
以Good和GoodStatus为例:
一、注解仅添加在一方:
@Entity
@Table(name = "GOOD")
@Where(clause="enabled=1") //Used for logical delete, disabled objects are always hidden
public class Good extends AMfgObject implements Serializable {
/** serialVersionUID */
private static final long serialVersionUID = -7656499731749432022L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "GOOD_ID", nullable = false)
private Long id;
@OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
private Set<GoodStatus> goodStatus;
/**
* Empty constructor
*/
public Good(){}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Set<GoodStatus> getGoodStatus() {
return goodStatus;
}
public void setGoodStatus(Set<GoodStatus> goodStatus) {
this.goodStatus = goodStatus;
}
/**
* add GoodStatus directly
* @param goodStatus
*/
public void addGoodStatus(GoodStatus goodStatus){
this.goodStatus.add(goodStatus);
/*goodStatus.setGood(this);*/ //如果在多方也有注解则需添加这句,否则不能级联保存更新
}
}
在多方不加一方的映射(即不加Good good;这个属性)
@Entity
@Table(name = "GOODSTATUS")
@Where(clause = "enabled=1")
public class GoodStatus extends AMfgObject implements Serializable {
/**
*
*/
private static final long serialVersionUID = -1279190303132720639L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID", nullable = false)
private Long id;
@Column(name = "VALUE")
private String value;
public GoodStatus() {
super();
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
这种情况下生成的SQL语句是这样的:
CREATE TABLE good (
good_id bigint(20) NOT NULL auto_increment,
PRIMARY KEY (good_id)
) ;
-- create table goodstatus
CREATE TABLE goodstatus (
id bigint(20) NOT NULL AUTO_INCREMENT,
value varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (ID)
);
--good_good_status
CREATE TABLE good_good_status (
good_GOOD_ID bigint(20) NOT NULL,
good_status_id bigint(20) NOT NULL,
PRIMARY KEY (good_GOOD_ID,good_status_id),
KEY FK_GOOD_ID (good_GOOD_ID),
KEY FK_GOOD_STATUS_ID (good_status_id)
);
生成了三个表,类似于manytomany
二、注解仅添加在多的一方,则与双方都添加注解相同,仅生成两个表:
Good对应表不变,GoodStatus表
SQL语句对应如下:
-- create table goodstatus
CREATE TABLE goodstatus (
id bigint(20) NOT NULL AUTO_INCREMENT,
value varchar(255) COLLATE utf8_unicode_ci NOT NULL,
good_id bigint(20) DEFAULT NULL,
PRIMARY KEY (ID),
CONSTRAINT FK_GOOD_ID FOREIGN KEY (good_id) REFERENCES GOOD(ID)
);
工作中遇到的问题--Hibernate注解添加在一方和多方的区别的更多相关文章
- 工作中遇到的问题--Hibernate一对多保存简化Service层代码
在创建一方的entity是添加一个增加多方的方法: package com.sim.mfg.data.domain; import java.io.Serializable;import java.u ...
- hibernate中1对1的注解配置
hibernate中1对1的注解配置分为:外键关联映射和主键关联映射 1.外键配置 //一方@Entity@Table(name="test_classinfo")public c ...
- Hibernate 注解中CascadeType用法汇总
这两天,参加一个课程设计,同时这个项目又作为一个模块镶嵌到其他项目中,考虑如此,应与原先的架构相同,因牵扯到留言和相互@功能,故数据库之间OneToOne,OneToMany,ManyToMany之风 ...
- Hibernate注解使用以及Spring整合
Hibernate注解使用以及Spring整合 原文转自:http://wanqiufeng.blog.51cto.com/409430/484739 (1) 简介: 在过去几年里,Hibernate ...
- hibernate注解方法使用总结(转)
原博文地址:http://blog.sina.com.cn/s/blog_935ebb670101dnre.html 1.类级别注解 @Entity 映射实体类 @Table 映射数据库 ...
- Hibernate注解
前言: 最近正在学习Hibernate通过注解(annotation)来管理映射关系,以前都是通过XML映射文件.下面拿个小例子说一下. 数据库物理模型: 数据库的描述: 一篇博客随笔可以分到不同的类 ...
- hibernate 注解 主键生成策略
一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue ...
- Hibernate 注解的用法以及说明
1.类级别注解 @Entity 映射实体类 @Table 映射数句库表 @Entity(name="tableName") - 必须,注解将一个类声明为一个实体be ...
- Hibernate注解映射联合主键的三种主要方式
今天在做项目的时候,一个中间表没有主键,所有在创建实体的时候也未加组件,结果报以下错误: org.springframework.beans.factory.BeanCreationException ...
随机推荐
- 最大子段和-Program A
最大子段和 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description G ...
- HDU 1045 - Fire Net (最大独立集)
题意:给你一个正方形棋盘.每个棋子可以直线攻击,除非隔着石头.现在要求所有棋子都不互相攻击,问最多可以放多少个棋子. 这个题可以用搜索来做.每个棋子考虑放与不放两种情况,然后再判断是否能互相攻击来剪枝 ...
- JS 基于面向对象的 轮播图2
<script> // 函数不能重名, --> 子函数 // is defined function --> 函数名是否写错了 function AutoTab(id) { T ...
- 安全增强 Linux (SELinux) 剖析
架构和实现 Linux® 一直被认为是最安全的操作系统之一,但是通过引入安全增强 Linux(Security-Enhanced Linux,SELinux),National Security Ag ...
- Linux下tmpfs与ramfs的区别
ramfs是Linux下一种基于RAM做存储的文件系统.在使用过程中你就可以把ramfs理解为在普通的HDD上建立了一个文件系统,而现在HDD被替换成了RAM,因为是RAM做存储所以会有很高的存储 ...
- (转)Ratchet教程:meta与link标签
原文:http://www.w3cplus.com/mobile/meta-and-link-tags-for-ratchet.html Ratchet教程:meta与link标签 ...
- hive 中 union all
hive 中的union all是不能在sql语句的第一层使用的,否则会报 Top level UNION is not supported currently 错误: 例如如下的方式: select ...
- Android Launcher 详解
(1) Launcher的定义:Android系统启动后,加载的第一个程序,是其他应用程序的入口. (2) Launcher的构成:HomeScreen(1.workspace(A ...
- yii2 数据验证
控制器层 <?php namespace frontend\controllers; use Yii; use frontend\models\FormsModel; use yii\web\U ...
- Activity与Service通信(不同进程之间)
使用Messenger 上面的方法只能在同一个进程里才能用,如果要与另外一个进程的Service进行通信,则可以用Messenger. 其实实现IPC(Inter-Process Communicat ...