今天被hibernate和mysql整了一下,切身感受到索引的重要性。
我用的是Hibernate注解的一对多映射,代码如下:
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable(name="user_followBy",
joinColumns={@JoinColumn(name="user_id")},
inverseJoinColumns={@JoinColumn(name="followBy_id", unique=false)})
private List<User> followBy = new LinkedList<User>();
这里有一点需要注意的,就是“unique=false”这句。如果没有这句,则数据库中生成的库表user_followby中,其followby_id 字段会建立相应的唯一索引,然而,这样很有可能会导致元素无法插入。举个例子:
当“user_followby”表中存在 (14,1)这条记录,当你想在插入(10,1)时,系统就会报错,原因是followby_id字段建立了唯一索引,但外部试图向其插入某个记录时,假如这个记录对应followby_id的值跟表中原来存在的数值相同,则无法插入。
所以在用注解描述一对多关系时,视具体情况,加上“unique=false”这句。
其实,调bug是一种享受。
分享到:
相关推荐
本文将深入探讨Hibernate中的两个关键概念——注解声明的一对多(@OneToMany)和多对一(@ManyToOne)关系,以及如何在实际项目中应用它们。 一、Hibernate注解介绍 Hibernate通过注解简化了Java类与数据库表之间的...
- **一对多关联**:`@OneToMany` - **多对一关联**:`@ManyToOne` - **多对多关联**:`@ManyToMany` 每个关联注解都有各自的属性,如mappedBy、cascade、fetch等,用于控制关联的细节。 7. **懒加载和立即加载...
本篇主要讨论的是Hibernate中的一对多关系映射,以及如何在实际操作中进行配置和使用。 一对多关系指的是一个实体可以与多个其他实体相关联。例如,在用户系统中,一个用户可以有多个订单,这就是典型的一对多关系...
- **集合类型:** 映射一对多或多对多关系时,使用`@OneToMany`或`@ManyToMany`注解。 - **用cascading实现传播性持久化(Transitive persistence):** 在保存一个实体时自动保存与之关联的实体。 - **关联关系...
- `@OneToMany`:一对多关系,表示实体A的一个实例对应实体B的多个实例。 - `@ManyToMany`:多对多关系,需要中间关联表,可以通过@JoinTable注解来定义。 7. **懒加载与级联操作**: - `@LazyCollection...
4. **关联注解**:在处理一对一、一对多、多对一、多对多关联时,Hibernate提供了相应的注解。例如,`@OneToOne`、`@ManyToOne`、`@OneToMany`和`@ManyToMany`。例如,一个用户可能有多个订单,可以这样表示: ```...
使用 `@OneToOne`、`@ManyToOne`、`@OneToMany` 和 `@ManyToMany` 来表示一对一、一对多等关系。 ```java @Entity public class User { @OneToOne private Address address; ... } ``` - **3.2.6 映射...
解决这个问题通常需要对Hibernate配置、映射文件、数据库设置等多方面进行排查。在`configuration.txt`中,我们可以看到相关的配置信息,比如数据库连接参数、Hibernate的配置选项等。通过对这些信息的分析,可以找...
7. `@ManyToOne`, `@OneToOne`, `@OneToMany`, `@ManyToMany`: 这些注解用于处理实体间的关联关系,如一对一、一对多、多对一和多对多关系。例如: ```java @Entity public class User { @Id @GeneratedValue...
3. **关联映射**:XML映射文件中可以定义一对多、一对一、多对多等各种关系,比如使用`<set>`, `<one-to-one>`, `<many-to-many>`等元素。 **注解方式** 1. **@Entity**:这个注解标记一个Java类为Hibernate实体,...
本教程将基于“华南银行项目”这一实例,深入探讨Hibernate中的四种基本映射关系:一对一、一对多、多对一以及多对多。我们将从实际应用的角度出发,通过具体的代码示例来理解这些概念。 **一对一映射(One-to-One...
- **@OneToMany**:一对多关系,可以是单向或双向的,通常配合@JoinColumn或@JoinTable使用。 - **@ManyToOne**:多对一关系,可以是单向或双向的。 - **@ManyToMany**:多对多关系,通常使用@JoinTable来定义...
Hibernate Search是Hibernate ORM的一个扩展,它允许我们在Java应用中轻松地添加全文索引和搜索功能。 【描述】中提到的博文链接(已无法访问)可能提供了详细的步骤和示例代码,帮助开发者了解如何在实际项目中...
在Hibernate中,多对一映射主要通过配置文件(hbm.xml)或注解来实现。以下将详细介绍这两种方式: 1. **XML配置方式**: 在hibernate的映射文件中,多对一映射通常使用`<many-to-one>`标签来定义。假设我们有两个...
2.2.5. 映射关联关系:`@OneToOne`、`@ManyToOne`、`@OneToMany`和`@ManyToMany`注解分别用于映射一对一、一对多、多对一和多对多的关系。`@Cascade`用于设置关联关系的级联操作,如保存、删除等。 2.3. 映射查询:...
多对一映射是上述一对多映射的逆向形式,即多个实体共享一个父实体。 ```java public class Student { private int id; private String name; @ManyToOne @JoinColumn(name = "class_id") private Class clazz...
本文将深入探讨“Hibernate父亲与孩子”这一主题,即Hibernate中的多对一和一对多关系映射,以及如何利用Hibernate处理面向对象的树型结果。 在数据库设计中,"父亲"和"孩子"的概念通常对应于实体之间的关联关系,...
这通常发生在需要进行更复杂的配置时,例如多对多关系的复杂处理。 **XML元数据覆写**: 1. **编写`hibernate-mapping.xml`文件**:在该文件中使用XML语法定义实体Bean及其属性。 2. **使用`@XmlSchema`注解**:...
Hibernate Search 是一款强大的搜索工具,它为基于 Hibernate 的应用程序提供了一种将实体类与 Lucene 索引映射的方法,使得开发人员能够轻松地在应用程序中实现全文搜索功能。本文主要介绍如何搭建 Hibernate ...
- **2.2.5.3 集合类型**:使用 `@OneToMany` 或 `@ManyToMany` 来处理一对多或多对多的关系。 - **2.2.5.4 用 cascading 实现传播性持久化**:通过 `@Cascade` 注解设置关联关系中的级联操作,例如级联保存或删除...