工作中遇到的问题--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 ...
随机推荐
- Linux-Gcc生成和使用静态库和动态库详解
一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...
- Linux的三种特殊权限
1.Suid Set位权限 ●对文件以文件的拥有者身份执行文件 ●对目录无影响 权限设置: ●suid=u+s 2.Sgid Set位权限 ●对文件以文件的组身份执行文件 ●对目录在目录中最新创建的文 ...
- 前端CSS编程之道-LESS
由于前端css编写繁琐,最近开始学习LESS,用LESS编写文件.less文件可以直接编译成我们要的.css文件 学习Less 我下面是我练习时的截图,希望小伙伴也能动手自己写一下,而不是复制粘贴模式 ...
- Android 移动缩放的ImageView
今天介绍一下Android中怎么实现ImageView的缩放和移动,自定义TouchImageView. public class TouchImageView extends ImageView { ...
- shell指令expr和test指令
通过expr指令可以进行+.-.*.\.%等运算,但是有一点值得注意,使用乘法时,要在*前加上一个\符号. 通过test指令可以进行逻辑测试,进行测试的情况有四种: 1.整数测试 a.判断两个整数是否 ...
- 根据username查找user
返回的是一个list<User>,不过验证密码的时候,要求返回是一个user对象,如果用uniqueresult,这个是过时的方法,如果用getResultList 会得到一个列表,get ...
- ajax 中的一些方法应用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Python计算文件MD5值
import hashlib def fileMD5(filename): m = hashlib.md5() #md5计算 #m = hashlib.sha1() #sha1计算 #m = hash ...
- 解决办法-错误:Access denied for user 'root'@'localhost' - java
如下更改密码即可 mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';mysql> FLUS ...
- python3爬虫再探之豆瓣影评数据抓取
一个关于豆瓣影评的爬虫,涉及:模拟登陆,翻页抓取.直接上代码: import re import time import requests import xlsxwriter from bs4 imp ...