`
Anatorian
  • 浏览: 62181 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用JoinColumn使用JPA的OneToMany不自动生成数据库表

    博客分类:
  • java
JPA 
阅读更多

有两个实体Order和Customer,一个用户可以有多个订单,一个订单属于一个用户,所以Customer与Order是一对多的关系,那么在Order实体里可以有一个到Customer的引用customer,同时在Customer里有一个Order实体的集合orders。如果在只是如下这样写:

public class Order {
    @id
    private long id;
 
    @ManyToOne
    private Customer customer;
 
    public void setId(long id) {
        this.id = id;
    }
 
    public long getId() {
        return this.id;
    }
 
    public void setCustomer(Customer customer) {
        this.customer = customer;
    }
 
    public Customer getCustomer() {
        return this.customer;
    }
}
 
public class Customer{
    @id
    private long id;
 
    @OneToMany
    private Set<Order> orders;
 
    public void setId(long id) {
        this.id = id;
    }
 
    public long getId() {
        return this.id;
    }
 
    public void setOrders(Set<Order> orders) {
        this.orders = orders;
    }
 
    public Set<Order> getOrders() {
        return this.orders;
    }
}

那么系统可能会自动生成一张Customer_Order关联表,可是事实上我们不需要这样的表,因为通过 Select order from Order order where order.customer.id=:id, 就可以找到某个Customer的Orders,而不需要另建一张表。要想去掉这个自动生成的表,要这样写:

public class Order {
    @id
    private long id;
 
    @ManyToOne
    @JoinColumn(name="customer", nullable=false)
    private Customer customer;
 
    public void setId(long id) {
        this.id = id;
    }
 
    public long getId() {
        return this.id;
    }
 
    public void setCustomer(Customer customer) {
        this.customer = customer;
    }
 
    public Customer getCustomer() {
        return this.customer;
    }
}
 
public class Customer{
    @id
    private long id;
 
    @OneToMany(mappedBy="customer")
    private Set<Order> orders;
 
    public void setId(long id) {
        this.id = id;
    }
 
    public long getId() {
        return this.id;
    }
 
    public void setOrders(Set<Order> orders) {
        this.orders = orders;
    }
 
    public Set<Order> getOrders() {
        return this.orders;
    }
}

多出一个mappedBy和JoinColumn, 就是告诉JPA实现者,orders是通过order里的customer映射来的,每次查找orders通过Order里的customer联接。这样就不会生成Customer_Order关联表了

分享到:
评论
1 楼 xiaojianhx 2010-06-26  
我想用@JoinColumn,但是找不到,缺少那个包呢

相关推荐

    JPA_OneToMany学习教程

    在Java世界中,Java Persistence API (JPA) 是一种用于管理关系数据库的规范,它使得开发者可以使用面向对象的方式来操作数据库。"JPA_OneToMany"是JPA中的一个关键概念,涉及实体之间的关联关系,特别是在处理一对...

    JPA学习总结(三)--JPAOneToMany双向关联

    在本篇《JPA学习总结(三)--JPAOneToMany双向关联》中,我们将深入探讨Java Persistence API (JPA)中的OneToMany关系映射,这是一种在数据库表之间建立一对多关联的方式。JPA作为ORM(对象关系映射)框架,允许我们...

    spring jpa操作数据库 级联数据 hibernate

    - "JPA_由数据库生成JavaBean.docx"可能介绍了如何从数据库反向工程生成Java实体类。 - "JPA之OneToMany和ManyToOne处理"的MHT文件深入讨论了这两种关联的处理方法。 - "SpringHibernateJPA0300_BoneCP.rar"可能...

    jpa工作中,多表查询的使用方式-----curd的Demo ,基本掌握后,jpa 就不是问题了

    标题提到的"多表查询的使用方式"是JPA中的一个重要概念,尤其是对于复杂业务场景,多表关联查询是必不可少的。JPA提供了多种方式进行多表查询,主要包括以下几种: 1. **JOIN查询**:在JPA中,你可以使用`@...

    JPA课程manyToMany OneToMany 等全部测试

    **JPA(Java Persistence API)**是Java平台上的一个标准,用于管理关系数据库中的对象-关系映射(ORM)。在本课程中,我们将深入探讨JPA中的一些关键关系映射类型,包括`@ManyToMany`、`@OneToMany`等,以及它们的...

    JPA视频教程_使用jpa映射单个实体对象

    这里的`GenerationType.IDENTITY`表示由数据库自动生成主键。 3. **属性映射(Field Mapping)**: JPA使用`@Column`注解将实体类的字段映射到数据库表的列。例如: ```java @Entity public class User { @Id @...

    jpa-day3-onetomany.zip

    总的来说,"jpa-day3-onetomany.zip"压缩包中的内容将帮助你理解和掌握Spring Data JPA中的一对多关系和多表联查操作。通过学习和实践这些示例,你可以更加熟练地在Java应用中处理数据库的关联关系,提高开发效率。

    jpa注解详解

    JPA(Java Persistence API)是Java企业版5(Java EE 5)的一部分,提供了一个对象关系映射方法,使得开发者可以使用声明方式定义如何将Java对象映射到关系数据库表。在JPA中,批注是一种使用元数据修饰Java源代码的...

    持久化对象的标准JPA

    1. **Identity(标识符)**:由数据库自动生成,如MySQL的`AUTO_INCREMENT`。 2. **Sequence(序列)**:通过数据库序列生成主键,如Oracle的`SEQUENCE`。 3. **Table(表)**:通过独立的主键生成表来生成主键。 ...

    Spring Data JPA从入门到精通

    在JPA中,实体(Entity)是数据库表的映射,使用`@Entity`注解标识。每个实体都有一个主键,通常用`@Id`注解标注。如果需要复合主键,可以使用`@IdClass`或`@EmbeddedId`。另外,`@GeneratedValue`用于指定主键生成...

    JPA学习笔记

    JPA提供了多种主键生成策略,如IDENTITY(自动增长)、SEQUENCE(序列)、TABLE(表生成)等。 3.4 字段、添加字段、添加表关联 `@Column`注解用于定义字段的数据库列映射,包括长度、是否可为空等属性。`@...

    JPA 标注 JPA标签手册

    它提供了一种对象关系映射方法,允许您以标准、可移植的方式声明性地定义如何将Java对象映射到关系数据库表,不仅在Java EE 5应用服务器内部,而且在Java标准版(Java SE)5应用程序外部都能工作。 在使用TopLink ...

    JPA学习文档笔记

    - 使用`@OneToMany`注解表示一对多关系,通常还需要使用`@JoinColumn`或`@JoinTable`来指定关联方式。 - 延迟加载(`@Lazy`)是处理一对多关联时的一个重要特性,有助于优化性能。 - **多对多关联**: - 多对多关系...

    java程序使用JPA注解详解.zip

    3. `@GeneratedValue`: 用于主键生成策略,可以设置为`GenerationType.IDENTITY`(数据库自动增长)、`GenerationType.SEQUENCE`(序列)、`GenerationType.TABLE`(全局表)等。 4. `@Temporal`: 对于日期和时间...

    JPA映射关系详解javax JPA JPA映射关系 JPA映射

    在 JPA 中,使用 `@OneToMany` 注解来定义这种关系,并通过 `@JoinColumn` 指定关联字段。 **示例代码:** ```java @OneToMany @JoinColumn(name = "CUST_ID") private Set&lt;Contact&gt; contactList; ``` 这里,`...

    JPA 黎活明JPA视频代码

    `@OneToMany`注解用来表示这种关系,同时可能需要使用`@JoinColumn`来指定外键列。 6. **lib**:这个文件夹包含了运行这些项目所需的库文件,主要是JPA供应商的实现和其他依赖的jar包。在实际使用时,需要将这些库...

    JPA注解的解释和说明.pdf

    @OneToOne、@OneToMany、@ManyToOne:这些注解分别对应于一对一、一对多和多对一的数据库表关系。 关于MAVEN打包的问题,当pom.xml文件不存在或无法激活时,通常需要在pom.xml中添加maven-compiler-plugin插件,并...

    JPA注解说明 详解

    `strategy`可选值包括AUTO、IDENTITY、SEQUENCE和TABLE,分别代表ORM框架自动选择、基于数据库的Identity字段、基于Sequence字段和基于额外表生成主键。`generator`用来指定主键生成器,比如在Hibernate中可以指定...

    JPA详细文档(JPA 批注参考)

    如果不使用此批注,JPA提供程序会认为类是非持久化的。 2. **数据库模式属性批注**: - `@Table`:用于指定实体对应的数据库表名。 - `@Column`:定义实体属性与数据库列的映射。 - `@JoinColumn`:在一对一和多...

    使用jpa映射关联和继承

    在Java世界中,Java Persistence API(JPA)是用于对象关系映射(ORM)的一种标准框架,它允许开发者将数据库操作与业务逻辑紧密结合,而无需编写大量的SQL代码。本篇文章将深入探讨如何在JPA中映射关联和实现继承。...

Global site tag (gtag.js) - Google Analytics