工作中遇到的问题--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 ...
随机推荐
- SQL 插入日期时间 变量值
--看看吧^^ CREATE TABLE #temp ( test datetime ) go --SQL: INSERT #temp SELECT 1.1 UNION ALL GO --SQL: I ...
- WP8.1 Study4:WP8.1中控件集合应用
1.AutoSuggestBox的应用 在xaml里代码可如下: <AutoSuggestBox Name="autobox" Header="suggestion ...
- sql 给数据库表 字段 添加注释
最近发现一些代码生成器 有针对注释做一个很好的转化,之前建表的时候 没有这块的注释.现在想增加,专门去看了下 如何增加注释 1 -- 表加注释 2 EXEC sys.sp_addextendedpro ...
- linux卸载挂载点显示device is busy
在做umount设备时, device is busy是令人头痛的提示: [root@delphi /]# umount /dev/cdrom umount: /mnt/cdrom: device i ...
- python视频教程:十分钟快速入门python
想要学习python这门语言,却始终找不到一个全面的Python视频教程,倘若你是真心想学好一门语言,小编建议你亲自动手实践的.下面来看看入门python的学习教程. Python的语言特性 Pyth ...
- 关于Json处理的两个实例
<script> var value1="{\"layer_datum\":{\"holdId\":\"dcdm\", ...
- hdu1712 线性dp
//Accepted 400 KB 109 ms //dp线性 //dp[i][j]=max(dp[i-1][k]+a[i][j-k]) //在前i门课上花j天得到的最大分数,等于max(在前i-1门 ...
- poj2769 暴力
//Accepted 208 KB 157 ms //纯暴力 //vis数组初始化时要用多少设置多少,不然TLE #include <cstdio> #include <cstrin ...
- Oracle 中批量导入大量测试数据的方法
执行如下批处理命令: declare maxrecords constant int := 100000; i int := 1;begin for i in 1 .. 20000 loop ...
- 给宏基装WIN8.1系统之问题与解决方法(原创)
1.采用老毛桃U盘PE进入笔记本: 2.备份桌面文件以防丢失: 3.将下载好的Win8操作系统镜像加载到虚拟光驱,最好把操作系统拷贝到笔记本硬盘上,不然可能会出现意想不到的错误: 4.打开老毛桃桌面安 ...