先上实体类
serviceView实体
@Entity @Table(name = "service_view") public class ServiceView implements Serializable{ @Column(name = "name", length = 50) private String name; @OneToMany(mappedBy = "serviceView",fetch=FetchType.LAZY,cascade={CascadeType.REMOVE}) private Set<ServiceNode> serviceNodes=new HashSet<ServiceNode>(); //省略get、set方法 }
serviceNode实体:
@Entity @Table(name = "service_node") public class ServiceNode implements Serializable{ @Column(name="x") private Integer x; @Column(name="y") private Integer y; @ManyToOne(fetch=FetchType.LAZY,cascade={CascadeType.REMOVE}) @JoinColumn(name="service_id",insertable=false,updatable=false) private ServiceView serviceView; @Column(name="service_id") private String serviceId; //省略get,set方法 }
这时候执行一个删除serviceView的对象,不能级联删除相关的serviceNode对象。
service.delete(serviceView);
但是我与不想使用FetchType.All,或者FetchType.EAGER
不知道为什么。
现在只能费劲点,去掉外键Id字段,改为:
@ManyToOne(fetch=FetchType.LAZY,cascade={CascadeType.REMOVE}) @JoinColumn(name="service_id") private ServiceView serviceView;
谁有好的方法,可以分享一下
相关推荐
### Hibernate注解与关系映射详解 #### 一、Hibernate注解基础 **1.1 @Entity** - **概述**:`@Entity`用于标记一个Java类为实体...在处理复杂的实体间关系时,理解不同注解的作用以及如何合理搭配使用是非常关键的。
懒加载默认不加载关联对象,只有在真正需要时才查询数据库;而急加载则会在加载主体对象时一起加载关联对象。通常,为了性能考虑,推荐使用懒加载,但过度依赖懒加载可能导致N+1查询问题。 6. **级联操作(Cascades...
这意味着,当我们操作 School 或 Address 时,关联的对象也将被级联操作。 例如,在 School 中,我们可以使用 @OneToOne(cascade = CascadeType.ALL) 来维护与 Address 的一对一关系。 ```java @Data @Entity @...
`name`用于指定列名,`nullable`、`unique`、`length`、`insertable`和`updateable`分别控制列的可空性、唯一性、长度、是否在INSERT和UPDATE语句中使用。`columnDefinition`则可以指定字段的数据库类型。例如: ``...
- `fetch`:读取策略,包括`EAGER`(急加载,默认值)和`LAZY`(懒加载)。 - `optional`:是否允许为`null`,默认为`true`。 #### 6. `@Column` - **描述**:`@Column` 注解用于详细定义实体属性映射到数据库...
JPA 使用注解和 XML 来配置实体类与数据库表之间的映射关系。本文将详细解读 JPA 注解的基本用法,并通过 Hibernate 框架作为实现 JPA 规范的具体例子。 #### 1. @Entity - **用途**:`@Entity` 注解用来标记一个 ...
`fetch`定义加载策略,`cascade`定义级联操作,如保存、删除等是否影响关联的实体。 9. **@OneToOne, @OneToMany, @ManyToMany**:这三种注解分别用于定义一对一、一对多和多对多的关系映射,它们也包含fetch和...
在软件开发领域,尤其是Java企业级应用中,Hibernate是一个广泛使用的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式操作数据库。而Java Persistence API(JPA)是Java平台上的标准ORM规范,它定义了一...
`fetch`控制关联对象的加载策略,`cascade`定义级联操作,如保存、删除等。 9. **@OneToOne**、**@OneToMany**、**@ManyToMany**:这些注解分别用于表示一对一、一对多和多对多的关系映射,它们都有相应的属性来...
- `insertable` 和 `updatable`:表示在执行插入和更新操作时该字段是否参与,默认均为 `true`。 - `columnDefinition`:表示该字段在数据库中的实际类型。 **示例**: ```java @Column(name = "birthday", ...
`name`参数是可选的,用于指定实体在数据库中的表名,当实体名与表名不一致时使用。 2. **@Table(name="", catalog="", schema="")**:这个注解用于提供关于实体所对应数据库表的更多信息,包括表名、Catalog和...
可选项包括 `EAGER`(立即加载)和 `LAZY`(延迟加载)。默认为 `EAGER`。 - `optional`:可选,用于指定属性是否允许为 `null`。默认为 `true`。 - **用法**:放在属性上。 ```java @Entity public class User ...
当属性用于计算或非持久化逻辑时,应使用此注解。 #### 6. `@ManyToOne`与关联映射 - **`@ManyToOne`**:表示多对一的关系,即多个实体可以关联到单个实体上。此注解还可以包含`fetch`和`cascade`属性,进一步控制...
通过以上注解的使用,我们可以轻松地定义和管理实体类与数据库之间的映射关系,从而简化了数据访问层的开发工作。这些注解不仅提供了强大的功能,还大大提高了代码的可维护性和可扩展性。对于初学者而言,熟练掌握...