【Jpa hibernate】一对多@OneToMany,多对一@ManyToOne的使用

简介: 项目中使用实体之间存在一对多@OneToMany,多对一@ManyToOne的映射关系,怎么设置呢?GitHub地址:https://github.com/AngelSXD/myagenorderdiscount可以查看完整项目下面给一个例子:类似于一个部门对应多个员工这里给出 一个流水账单对应多条订单折扣信息 流水账单类:package com.

项目中使用实体之间存在一对多@OneToMany,多对一@ManyToOne的映射关系,怎么设置呢?

GitHub地址:https://github.com/AngelSXD/myagenorderdiscount可以查看完整项目

下面给一个例子:

类似于一个部门对应多个员工

这里给出 一个流水账单对应多条订单折扣信息

 

流水账单类:

package com.agen.orderdiscount.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.util.Date;
import java.util.List;

/**
 * 流水账单
 * 请求提现以后,被记录在流水账单
 * @author SXD
 * @date 2018/1/16
 */
@Data(staticConstructor = "of")
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Entity
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator" )
public class RunningAccount {

    /**
     * 账单ID
     */
    @Id
    @GeneratedValue(generator = "uuid2")
    @Column(length = 36)
    private String raId;
    /**
     * 流水账单编号
     */
    @Column(nullable = false,length = 100)
    private String raSn;
    /**
     * 流水金额
     */
    @Column(nullable = false,precision = 10,scale = 2)
    private Double raAccount;
    /**
     *流水账时间
     */
    @Column(nullable = false)
    private Date raDate;
    /**
     * 流水账单 状态
     * 1    请求提现
     * 2    通过提现请求,提现成功
     * 3    拒绝提现请求,提现失败
     * 4    通过部分提现请求中的订单,拒绝部分提现请求中的订单
     *
     */
    @Column(nullable = false)
    private Integer accountStatus;
    /**
     * 操作来源
     */
    @Column(nullable = false,length = 20)
    private String raOperater;
    /**
     * 流水备注1
     */
    @Column(length = 500)
    private String ratCre1;
    /**
     * 流水备注2
     */
    @Column(length = 500)
    private String ratCre2;

    /**
     * 关联子集流水账单
     * 例如:本次提现 涉及到哪些订单,这些订单分别对应哪些可提现的流水
     *
     * mappBy表示关系被维护端,只有关系端有权去更新外键。
     * 这里还有注意OneToMany默认的加载方式是赖加载。当看到设置关系中最后一个单词是Many,那么该加载默认为懒加载
     */
    @OneToMany(cascade = {CascadeType.REFRESH,CascadeType.MERGE},mappedBy = "parentRa",fetch = FetchType.EAGER)
    private List<AvAmount> childAvamounts;



}
View Code

 

订单折扣信息类:

package com.agen.orderdiscount.entity;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.util.Date;

/**
 * 可提现金额
 * 报告完成,订单完结 从预估金额存入可提现金额
 * @author SXD
 * @date 2018/1/16
 */
@Data(staticConstructor = "of")
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Entity
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator" )
public class AvAmount {

    /**
     * 可提现ID
     */
    @javax.persistence.Id
    @GeneratedValue(generator = "uuid2")
    @Column(length = 36)
    private String Id;
    /**
     * 本次转入可提现金额
     */
    @Column(nullable = false,precision = 10,scale = 2)
    private Double avAccount;
    /**
     * 本条可提现金额记录 状态
     * 1    可提现
     * 2    请求提现,正在等待处理
     * 3    已经成功转账,提现成功
     * 4    不满足提现条件,被拒绝提现请求的
     *
     */
    @Column(nullable = false)
    private Integer amountStatus;
    /**
     * 本次转入时间
     */
    @Column(nullable = false)
    private Date avDate;
    /**
     * 订单ID
     */
    @Column(nullable = false)
    private Integer orderId;
    /**
     * 订单编号SN
     */
    @Column(nullable = false,length = 20)
    private String orderSn;
    /**
     * 机构ID
     */
    @Column(nullable = false)
    private Integer adminId;
    /**
     * 产品ID
     */
    @Column(nullable = false)
    private Integer productId;
    /**
     * 会员ID
     */
    @Column(nullable = false)
    private Integer memberId;
    /**
     * 采样包ID
     */
    @Column(nullable = false)
    private Integer cybId;
    /**
     * 操作来源
     */
    @Column(nullable = false,length = 20)
    private String avOperater;
    /**
     * 可提现金额备注1
     */
    @Column(length = 500)
    private String avCre1;
    /**
     * 可提现金额备注2
     */
    @Column(length = 500)
    private String avCre2;

    /**
     * 关联流水账单记录
     *
     * 这里设置JoinColum设置了外键的名字,Available是关系维护端
     */
    @ManyToOne(cascade = {CascadeType.MERGE,CascadeType.REFRESH})
    @JoinColumn(name="parentRa")
    private RunningAccount parentRa;

}
View Code

 

相关文章
|
1月前
|
缓存 Java 数据库连接
深入理解Java中的JPA与Hibernate
深入理解Java中的JPA与Hibernate
|
1月前
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
【6月更文挑战第25天】在Java持久层,Hibernate与JPA提供ORM及数据库操作简化。JPA是EE规范,定义ORM接口;Hibernate是其实现,功能丰富。在一个在线书店项目中,使用@Entity标注实体类如Book,通过JpaRepository接口(如BookRepository)进行数据访问。服务层调用仓库接口方法,如搜索书籍。当需自定义查询时,可使用JPQL或SQL。Spring的@Transactional注解处理事务管理,展示出高效开发流程。
|
1月前
|
SQL 缓存 Java
Java持久化新篇章:Hibernate与JPA的进阶探索
【6月更文挑战第25天】在Java持久化技术中,Hibernate和JPA日益发展,本文以电商系统为例,展示它们的新特性和进阶应用。JPA通过注解如@Entity实现对象-关系映射,EntityManager处理CRUD操作。Hibernate则扩展了JPA,提供二级缓存、自定义HQL/SQL查询及批量操作,如批量更新商品价格,显示了其在性能优化和复杂需求上的灵活性。两者在现代Java开发中不可或缺。
|
1月前
|
Java 数据库连接 数据库
探索JPA生态:Hibernate与其他ORM框架的对比分析
【6月更文挑战第25天】**JPA标准下的Hibernate是流行的ORM实现,提供丰富功能如二级缓存和延迟加载,但其学习曲线较陡,性能优化复杂。相比如MyBatis,Hibernate的JPQL更面向对象,MyBatis则接近SQL。选择ORM需考虑项目需求和个人偏好。**
|
1月前
|
缓存 Java 数据库连接
解析Hibernate与JPA:Java对象的数据库化之旅
【6月更文挑战第25天】在Java企业开发中,Hibernate和JPA提供优雅的数据持久化方案。Hibernate是JPA规范的强大ORM实现,简化对象与数据库映射。配置环境后,通过@Entity注解定义实体类映射表,如`User`类映射&quot;users&quot;表。利用JPA的EntityManager执行查询和更新,如JPQL查询及对象更新。事务管理和性能优化是关键,确保数据完整性和应用性能。本文揭示了Hibernate与JPA的最佳实践,助开发者从容应对数据持久化。
|
1月前
|
Java 数据库连接 API
数据库与Java的无缝对接:Hibernate与JPA的集成与应用
【6月更文挑战第25天】Java企业级应用中,Hibernate和JPA是ORM主流框架。JPA是标准API,定义对象-关系映射规范,强调标准化和可移植性。Hibernate是JPA的具体实现,扩展了更多功能,如强大的查询语言和缓存机制。两者集成允许开发者利用Hibernate性能,通过JPA注解保持代码规范。示例展示了如何使用JPA注解定义实体和Hibernate执行查询,实现数据库操作。这种方式提升了开发效率和应用质量。
|
1月前
|
缓存 Java 数据库连接
Java开发者必备:Hibernate与JPA在企业级应用中的最佳实践
【6月更文挑战第25天】Java企业开发常用Hibernate和JPA,两者通过ORM简化数据库操作,提升开发效率。它们支持复杂查询,具有良好的可扩展性。最佳实践中,应注意映射配置的合理性,优化查询性能,利用缓存提升性能,以及妥善管理事务。示例代码展示了使用JPA进行分页查询的方法。
|
1月前
|
缓存 Java 数据库连接
构建高效数据库交互:Hibernate与JPA的性能优化策略
【6月更文挑战第25天】在大数据时代,优化Hibernate和JPA的数据库性能至关重要。本文探讨了优化策略:正确配置映射以减少冗余,利用JPQL/HQL提升查询效率,避免全字段选择,使用索引和分页,有效利用缓存策略,以及管理事务以平衡资源锁定。示例代码展示了分页查询的实现,以防止性能下降。
|
1月前
|
缓存 Java 数据库连接
从ORM到实践:Hibernate与JPA的详细指南
【6月更文挑战第25天】ORM技术如Hibernate和JPA简化了Java与数据库交互。Hibernate是流行的ORM框架,JPA是Java EE的规范,两者结合提供了高效的数据持久化方案。配置Hibernate涉及数据库连接和实体映射。通过注解定义实体类,如`@Entity`、`@Table`、`@Id`等。持久化操作通过Session接口完成,例如保存对象。缓存、加载策略(延迟加载 vs. 立即加载)和查询优化是提升性能的关键。理解这些概念有助于选择和优化ORM使用。
|
1月前
|
SQL Java 数据库连接
Java持久化革命:Hibernate与JPA的实战应用
【6月更文挑战第25天】Java世界中,JPA作为ORM规范简化了数据库交互,而Hibernate是其实现者。通过引入依赖、定义注解实体类、配置 Hibernate,开发者能便捷地进行数据操作。Hibernate的使用减少了手动SQL的需求,提升了开发和维护效率,展示了其在持久化技术中的革命性影响和价值。