首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JPA:给DB上的外键命名?

首先,我们需要了解什么是 JPA(Java Persistence API)。JPA 是 Java EE 和 Java SE 应用程序中对象持久化的标准化规范。它通过 ORM(Object-Relational Mapping)技术将 Java 对象映射到关系型数据库中。

给 DB 上的外键命名,通常情况下需要遵循以下规范:

  1. 如果使用 EclipseLink JPA,外键名称默认为实体类名。
  2. 如果使用 Hibernate JPA,外键名称默认为实体类名加下划线。
  3. 如果使用 Spring Data JPA,外键名称可以通过设置 jpa.hibernate.naming_strategy 或者 jpa.hibernate.physical_naming_strategy 参数来自定义。

下面是一些建议的外键命名:

  1. 使用实体类名作为外键名称,例如:Customer_IDOrder_ID 等。
  2. 使用实体类名的缩写作为外键名称,例如:CustomerIdOrderId 等。
  3. 使用有意义的名称作为外键名称,例如:OrderDetailIdCustomerName 等。

总之,在选择外键名称时,应该保证名称具有描述性,能够清晰地表明该外键与哪个实体相关。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring Data JPA系列2:快速在SpringBoot项目中熟练使用JPA

SpringData JPA正是通过各种注解,来完成对各个字段定义与行为约束,以及完成表间关联关系(比如)。 常见一些注解以及含义功能说明,在本文末尾表格里面进行了梳理,此处不赘述。...: 基于SpringData JPA命名规范,直接定义接口 使用自定义SQL语句进行个性化定制,这种适用于一些需要高度定制化处理场景 JPA中支持一些命名关键字与命名示例,参见本文后面梳理表格...创建出来,并且相关约束条件(比如自增主键、关联之类)也会一并创建并设置上去,如下示意,左侧代码自动创建出右侧DB表结构: 补充说明: 虽然这个功能比较方便,但是强烈建议在生产环境上关闭此功能...控制打印SQL语句 spring.jpa.show-sql=true 如果设置为true,则会在日志中打印每次DB操作所执行最终SQL语句内容,这个比较适合开发过程中问题定位分析,生产环境建议关闭...这里对一些高频易用注解与常见接口方法命名规范进行梳理介绍。 常用注解 Repository方法命名约定 DB里面一些关键字对应SpringData JPA命名关键字列举如下: 5.

1.3K40

Spring全家桶之SpringData——Spring Data JPA

导入jar 两个核心jar 加上3个sl4jjar 2. 在配置文件中开启Spring Data JPA命名空间以及它约束 3. 在配置文件中添加Spring Data JPA配置 4....=“roles_id”) 在本表创建roles_id 这个栏位开启并维护这个一般与级联操作属性同时出现 @JoinTables 映射中间表信息,配置在哪一侧都可以,多对多joinColumns...: 当前表主键所关联中间表中字段inverseJoinColumns :建立另一张表在中间表中字段 举例: @JoinTable(name=“t_roles_menus”,joinColumns...本项目是基于 Hibernate Jpa项目构建 ,Hibernate Jpa查看上篇博文 ?...一对多关联操作 需求:从角色到用户一对多关联关系 角色:一方 用户:多方(添加) 创建用户实体 需要在添加那一开启级联操作 ,防止数据插入时出现异常 @ManyToOne(cascade

3.7K10

SpringBoot系列教程JPA之新增记录使用姿势

SpringBoot系列教程JPA之新增记录使用姿势 一篇文章介绍了如何快速搭建一个JPA项目环境,并给出了一个简单演示demo,接下来我们开始业务教程,也就是我们常说CURD,接下来进入第一篇...这个在POJO中怎么体现 一个表包含另一个表主键时(主键关联,)等特殊情况,POJO中有体现么?...,这个指定id并没有什么卵用,最终db中插入记录依然是自增方式来 ?...为什么会这样子呢,我们看下sql是怎样 ? 直接把id丢了,也就是说我们设置id不生效,我们知道@GeneratedValue 这个注解指定了id增长方式,如果我们去掉这个注解会怎样 ?...save 与 saveAndFlush 之间区别(从命名,前者保存,可能只保存内存,不一定落库;后者保存并落库,但是没有找到验证他们区别的实例代码,所以先不予评价) 注解更详细使用说明 II.

1.3K20

Spring Data JPA系列3:JPA项目中核心场景与进阶用法介绍

本篇内容将在上一篇已有的内容基础,进一步聊一下项目中使用JPA一些高阶复杂场景实践指导,覆盖了主要核心JPA使用场景,可以让你在需求开发时候对JPA使用更加游刃有余。...Repository 一篇文档中,我们知道业务代码中直接调用Repository层中默认提供方法或者是自己自定义接口方法,便可以进行DB相关操作。...自定义Listener还有个典型使用场景,就是可以统一记录DB数据操作日志。 定制化SQL,随心所欲 JPA提供@Query注解,可以实现自定义SQL语句能力。...一般而言,JAVA编码规范都要求filed字段命名需要遵循小驼峰命名规范,比如userName,而DB中column命名时候,很多人习惯于使用下划线分隔方式命名,比如user_name这种。...这样就涉及到一个映射策略问题,需要让JPA知道代码里面的userName就对应着DBuser_name。 这里就会涉及到对命名映射策略映射。主要有两种映射配置,下面分别阐述下。

1.1K20

我真的不想再用 JPA

在语法类似于SQL查询,但是操作是实体对象而不是直接对数据库表进行操作。...而且你想要实现一个 join 查询也是够费劲,除了要写上面那套代码,还要在实体做手脚,想到就想哭,有没有。难道直接写个 sql 不好吗,为什么要这么糟蹋自己。...还有一点,JPA 有些注解用上了之后会影响到数据库层面,比方说关键注解,如果你用默认设置,这个就真的会应用到数据库表里,在表。...还有其他一些 ORM 框架也是如此,这是我完全不能接受,凭什么,凭什么在我数据库改东西。 愿我参与项目中没有 JPA。...而 MyBatis 恰恰就是开发者自由一个框架。 还是那句话,不自由,毋宁死。这是第一个,恐怕也是最后一个用 JPA 项目了。

1.4K30

SpringBoot中@Transaction在不同MySQL引擎下差异性

在springboot进行事务测试时候,发现事务没有生效,在方法添加了@Transactional注解并让方法先执行插入操作,接着再抛出个异常,触发事务回滚,代码如下: @Transactional...,事务回滚并没有效果,数据已经插入到DB中: 搜索了下,发现有人提到说MySQL数据库事务不生效,可能和引擎类型有关系,因此下一步往这个方向排查一下。...完整JPA相关配置参数如下: # JPA Configure # database type spring.jpa.database=mysql # whether to show the sql...与其他存储引擎比较,MyISAM具有检查和修复表格大多数工具。MyISAM表格可以被压缩,而且它们支持全文搜索。它们不是事务安全,而且也不支持。如果事物回滚将造成不完全回滚,不具有原子性。...如果执行大量SELECT,MyISAM是更好选择。 InnoDB:这种类型是事务安全。它与BDB类型具有相同特性,它们还支持。InnoDB表格速度很快。

99520

jpaspringdata(1)jpa

-- 实际配置是 javax.persistence.spi.PersistenceProvider 接口实现类, 若 JPA 项目中只有一个 JPA 实现产品, 则也可以不配置该节点...="mgr")//mappedBy="mgr"表示维护一端,没写默认都是对应主键关联 public Department getDept() { return dept;...映射当前类所在表在中间表中,name 指定列名, referencedColumnName 指定列关联当前表哪一列,inverseJoinColumns={@JoinColumn...(name="CATEGORY_ID", referencedColumnName="ID")})//inverseJoinColumns 映射关联类所在中间表 @ManyToMany...备注:其它基本与hql一致,个人还是写sql写比较多,然后使用类方式也有//类找表 8.spring整合jpa <?xml version="1.0" encoding="UTF-8"?

1.9K20

利用Sharding-Jdbc实现分表

单表数据已经超过几千万行,通过数据库优化已经不能满足速度要求。分库分表提到了日程,必须解决。 因为使用了JPA,如果分库分表需要对数据访问层做较大改动,工作量太大,修改风险也太高。...可基于任何第三方数据库连接池,如:DBCP, C3P0, BoneCP, Druid等。 理论可支持任意实现JDBC规范数据库。...虽然目前仅支持MySQL,但已有支持Oracle,SQLServer,DB2等数据库计划。 它支持JPA,可以在几乎不修改代码情况下完成分库分表实现。因此,选择这个框架做一次分库分表尝试。...拆分后数据表结构为: 3 实现过程 以下是针对JPA项目的修改过程。其他项目请参考官方网站文档。...根据某一个值进行分配 前面的例子采用就是这种方法,因为这个数据可能会经常根据这个进行查询。

37210

利用Sharding-Jdbc实现分表

单表数据已经超过几千万行,通过数据库优化已经不能满足速度要求。分库分表提到了日程,必须解决。 因为使用了JPA,如果分库分表需要对数据访问层做较大改动,工作量太大,修改风险也太高。...可基于任何第三方数据库连接池,如:DBCP, C3P0, BoneCP, Druid等。 理论可支持任意实现JDBC规范数据库。...虽然目前仅支持MySQL,但已有支持Oracle,SQLServer,DB2等数据库计划。 它支持JPA,可以在几乎不修改代码情况下完成分库分表实现。因此,选择这个框架做一次分库分表尝试。...拆分后数据表结构为: ? 3 实现过程 以下是针对JPA项目的修改过程。其他项目请参考官方网站文档。...根据某一个值进行分配 前面的例子采用就是这种方法,因为这个数据可能会经常根据这个进行查询。

92830

Spring 全家桶之 Spring Data JPA(四)

@JoinColumn,name字段名称,referenceColumnName参照主表主键字段名称 * 在客户实体类(一对多中一这边)添加了配置,对于客户而言,具备了维护作用...* 注解配置多对一关系 * 1.配置表关系,@ManyToOne,targetEntity对方实体类字节码 * 2.配置(多对多使用中间表), * 配置过程...,查看执行SQL,相比上一次测试多了一条updatesql语句 查看数据库表,已更新,关联关系已经建立 在One2ManyTest中在增加testSave1() // 只配置联系人到客户关系...,查看执行SQL语句,没有执行update语句,在insert时候就已经建立 查看数据库表,存在,关联关系建立成功 在One2ManyTest中增加testSave2(),在linkMan...中set customer也可以建立两者之间关系,后台执行了4条SQL语句,因此可以看出在一对多关系中一一边建立维护关系可以执行较少SQL语句而完成关系建立,而多一方无需拥有关系维护

1.6K20

干货|一文读懂 Spring Data Jpa

JPA和Hibernate关系 JPA 是 Hibernate 一个抽象(就像JDBC和JDBC驱动关系); JPA 是规范:JPA 本质就是一种 ORM 规范,不是ORM 框架,这是因为 JPA...2.建成功后,添加依赖jar,由于 Jpa 只是一个规范,因此我们说用Jpa实际必然是用Jpa某一种实现,那么是哪一种实现呢?...position 指定参数序号,value 为赋参数值,temporalType 含义及取舍同前。...在 JPQL 中,查询所有实体 JPQL 查询语句很简单,如下: selectofromOrdero或selectofromOrderaso 这里关键字 as 可以省去,标识符变量命名规范与 Java...对于自定义方法,如需改变 Spring Data 提供事务默认方式,可以在方法添加 @Transactional 注解。

2.8K20

SpringDataJpa多表查询 (一对多)

表之间关系划分 一对一 一对多: 一一方:主表 多一方:从表 :需要再从表新建一列作为,他取值来源于主表主键 多对多: 中间表:中间表中最少应该由两个字段组成,这两个字段做为键指向两张表主键...在JPA框架中表关系分析步骤 在实现了ORM思想框架中(如JPA),可以让我们通过操作实体类就实现对数据库表操作。 首先确定两张表之间关系。...如果关系确定错了,后面做所有操作就都不可能正确。...在数据库中实现两张表关系 在实体类中描述出两个实体关系 配置出实体类和数据库表关系映射 JPA一对多 表关系建立 一对多关系中,我们习惯把一一方称之为主表,把多一方称之为从表。...在数据库中建立一对多关系,需要使用数据库约束。 配置文件 加入jpa配置 property <?xml version="1.0" encoding="UTF-8"?

1.1K10

kubernetes-6:使用yaml方式进行apollo容器化

笔者github提供一个快速部署readme.MD,按照提示顺次执行,即可在K8S中部署mysql和apollo,但是依然需要读者去mysql用户手动赋权: https://github.com/hepyu...下载apollosql初始化脚本: https://github.com/ctripcorp/apollo.git 到目录scripts/apollo-on-kubernetes/db下选择适当sql...因为我要将image推到我自己hub仓库,所以需要重新命名/tag,否则无法上传: docker tag apollo-portal-server:v1.4.0 hpy253215039/apollo-portal-server...因为我要将image推到我自己hub仓库,所以需要重新命名/tag,否则无法上传: docker tag alpine-bash:v3.8 hpy253215039/alpine-bash:v3.8...= org.hibernate.dialect.MySQL5Dialect 修改service-apollo-admin-server-dev.yaml中image为你私服镜像。

2.1K30
领券