代码如下:
package com.founder.tweb.entity.cms;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
@Entity
//表名与类名不相同时重新定义表名.
@Table(name = "GROUPLIB")
//默认的缓存策略.
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class GroupLib {
private Integer groupId;
private String groupName;
private String groupDesc;
private String groupType;
private Integer groupOrder;
private Integer activityId;
private Set<MediaGroup> mediaGroups = new HashSet<MediaGroup>();
private Set<ImageGroup> imageGroups = new HashSet<ImageGroup>();
//默认构造函数
public GroupLib() {
}
//带参数的构造函数
public GroupLib(Integer groupId, String groupName, String groupDesc,
String groupType, Integer groupOrder, Integer activityId) {
super();
this.groupId = groupId;
this.groupName = groupName;
this.groupDesc = groupDesc;
this.groupType = groupType;
this.groupOrder = groupOrder;
this.activityId = activityId;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getGroupId() {
return groupId;
}
public void setGroupId(Integer groupId) {
this.groupId = groupId;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getGroupDesc() {
return groupDesc;
}
public void setGroupDesc(String groupDesc) {
this.groupDesc = groupDesc;
}
public String getGroupType() {
return groupType;
}
public void setGroupType(String groupType) {
this.groupType = groupType;
}
public Integer getGroupOrder() {
return groupOrder;
}
public void setGroupOrder(Integer groupOrder) {
this.groupOrder = groupOrder;
}
public Integer getActivityId() {
return activityId;
}
public void setActivityId(Integer activityId) {
this.activityId = activityId;
}
@OneToMany
@JoinColumn(name = "groupId",updatable=false)
public Set<MediaGroup> getMediaGroups() {
return mediaGroups;
}
public void setMediaGroups(Set<MediaGroup> mediaGroups) {
this.mediaGroups = mediaGroups;
}
@OneToMany
@JoinColumn(name = "groupId",updatable=false)
public Set<ImageGroup> getImageGroups() {
return imageGroups;
}
public void setImageGroups(Set<ImageGroup> imageGroups) {
this.imageGroups = imageGroups;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
我的问题是当对表grouplib进行更新操作的时候,对应的mediaGroup中groupId就变成了null,我想改变这种影响,无论是否更新都不会影响mediagroup表,注意红色字体部分中的updatable=false,起了很关键的作用。
分享到:
相关推荐
在Java持久化框架Hibernate中,级联操作是处理对象关系映射(ORM)时非常重要的一个特性。级联操作允许我们在对一个实体进行操作时,自动地影响与之相关的其他实体,无需显式地处理这些关联。在这个" Hibernate级联...
在Java编程中,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发人员将数据库操作转换为面向对象的方式,从而简化了数据库应用的开发。范型(Generics)是Java 5引入的一个特性,用于提高代码类型安全性和...
- **多对一**:在`User`类中通过`@ManyToOne`映射到`Address`类,表示一个用户对应一个地址。 - **一对多**:可以在`Address`类中使用`@OneToMany`映射多个用户,但通常情况下,为了保持数据一致性,我们会选择在`...
标题中的“Hibernate - one to many - update”指向的是一个关于Hibernate框架中的一对多关联关系在更新操作时的专题。Hibernate是Java开发中常用的持久化框架,它简化了数据库操作,使得开发者可以更加关注业务逻辑...
级联操作允许将一个操作应用于关联的对象,如当删除一个实体时,可以选择是否同时删除与其关联的所有实体。常见的级联类型有`CascadeType.SAVE_UPDATE`、`CascadeType.DELETE`、`CascadeType.ALL`等。合理设置级联...
如果我们有一个`User`类和一个`Address`类,`User`有一个`List<Address>`的属性,我们可以在`@OneToMany`注解中添加`cascade = CascadeType.ALL`,表示当用户对象保存或更新时,其关联的所有地址也会被级联操作。...
2. 在关联的另一个实体类中(这里是`Order`),定义一个外键字段,比如`@ManyToOne`注解的`User user`字段,表示每个订单都属于一个用户。 3. 使用`mappedBy`属性来指定被引用的一方,例如在`@OneToMany`注解中设置`...
在描述中提到的“实体表映射”,就是指在程序中定义一个类,这个类对应数据库中的一个表,类的属性对应表的字段,这样就建立了对象与数据库之间的桥梁。 1. **实体类的创建**:在Java中,一个实体类通常是POJO...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过面向对象的方式处理数据库操作,极大地简化了数据访问层的代码。本教程将详细讲解如何使用Hibernate进行多表操作,这对于理解和...
在Java的持久化框架中,Hibernate是一个非常重要的工具,它为开发者提供了强大的对象关系映射(ORM)功能,使得在Java应用中操作数据库变得更加简单。本文将深入探讨Hibernate中的一对多和多对一映射关系,并通过一...
在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了数据库操作。本教程将详细讲解Hibernate中的关联关系映射配置,帮助你理解和掌握如何...
在Java的持久化框架Hibernate中,"多对一"关联关系是对象关系映射(ORM)中的一个重要概念。这种关联关系意味着在一个实体类中,一个或多个实例可以与另一个实体类的一个实例相关联。例如,我们可以想象一个班级...
同时,了解级联操作(Cascade Type)如SAVE_UPDATE、PERSIST、REMOVE等可以帮助避免不必要的数据库操作。 举例来说,如果我们有一个User类和Role类,User可以有多个Role,那么在User类中,我们可以这样配置: ```...
级联操作允许我们在操作一个实体时,自动处理与其关联的其他实体。例如,当删除一个用户时,可以选择是否同时删除该用户的所有订单。常用的级联类型有`SAVE_UPDATE`、`PERSIST`、`REMOVE`、`REFRESH`和`ALL`。 **懒...
在Java的持久化框架中,Hibernate是一个非常重要的存在,它为开发者提供了强大的对象关系映射(ORM)功能,使得在数据库操作上可以更加便捷地使用面向对象的方式。本主题将深入探讨Hibernate中的一对多和多对一映射...
- 级联操作:`cascade`属性可以配置为SAVE_UPDATE、PERSIST、MERGE、REMOVE等,决定操作一个实体时是否也影响关联的实体。 - FetchType:`fetch`属性控制关联对象的加载时机,EAGER会立即加载,LAZY则延迟到实际使用...
本篇文章将深入探讨Hibernate中的注释(Annotation)使用以及级联操作,并通过一个简单的源程序实例进行解析。 ### Hibernate 注释 在Hibernate 3.x版本之后,注释成为了一种主流的元数据定义方式,替代了传统的...
为了实现这些关联,我们需要在实体类中定义`@OneToMany`和`@ManyToOne`注解,配置关联字段,如`mappedBy`属性来指定被引用的一方。同时,可能还会涉及到级联操作(cascade),比如设置`CascadeType.ALL`来使CRUD操作...
在Java开发中,Hibernate是一个非常流行的Object-Relational Mapping(ORM)框架,它极大地简化了数据库操作。本文将深入探讨 Hibernate 的简单搭建以及其中的一对多映射关系。 ## Hibernate 搭建 1. **环境配置**...
4. **外键**:在“N”端的实体类中,需要有一个字段作为外键,指向“1”端的主键。这个字段通常使用`@ManyToOne`注解,并且可以通过`@JoinColumn`来指定外键列名。 5. **级联操作**:在一对多关系中,我们可以设置...