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

为什么实体框架核心选择"<EntityName>Name“而不是"Id”作为主键列?

实体框架核心选择"<EntityName>Name"而不是"Id"作为主键列的原因有以下几点:

  1. 可读性和可理解性:使用实体名称作为主键列可以使数据库表的结构更加直观和易于理解。通过直接使用实体名称作为主键,可以更清晰地表示实体之间的关系,而不需要额外的查询或关联操作。
  2. 业务需求:在某些业务场景中,实体的名称可能具有特殊的含义或重要性。使用实体名称作为主键可以更好地满足业务需求,例如在用户表中使用用户名作为主键,或在商品表中使用商品名称作为主键。
  3. 数据一致性:使用实体名称作为主键可以避免主键冲突的问题。如果使用自增长的数字作为主键(如"Id"),在分布式系统或多个数据源的情况下,可能会出现主键冲突的情况。而使用实体名称作为主键可以保证数据的唯一性和一致性。
  4. 数据库性能:使用实体名称作为主键可以提高数据库的性能。在某些情况下,使用自增长的数字作为主键可能会导致数据库的性能瓶颈,因为数据库需要维护和管理自增长的序列。而使用实体名称作为主键可以减少这种性能开销。

总结起来,实体框架核心选择"<EntityName>Name"作为主键列的主要原因是为了提高数据库的可读性、满足业务需求、保证数据一致性和提高数据库性能。

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

相关·内容

C# 数据操作系列 - 14 深入探索SqlSugar

花式映射 在实际开发中,程序中的实体类和数据库的表名并不能完全一致,造成的原因有很多,例如说团队对数据库的命名和对程序的命名有着不同的要求,数据库是先建立的程序是后开发的,又或者是程序只使用了数据库中一部分表等等...public bool IsPrimaryKey { get; set; } //设置该主键 public bool IsIgnore { get; set; }..., string dbColumnName, string entityName); public void Add(MappingColumn col); 显然,动态配置并不支持设置的其他内容。...,然后一次性初始化所有实体类。...OnLogExecuting是SqlSugar 的一个监听事件(虽然它不是事件,但我个人觉得写成事件模式比较好),作用是监控框架执行的SQL语句,可以用来调试或者做日志监控等。

2.1K30
  • SpringDataJPA笔记(1)-基础概念和注解

    @Id 标注用于声明一个实体类的属性映射为数据库的主键。...生成器可以在类、方法或者属性上定义 生成器是为多个实体类提供连续的ID值的表,每一行为一个类提供ID值,ID值通常是整数 元数据属性说明: name:生成器的唯一名字,可以被Id元数据使用。...@Where 在互联网项目中,通常删除都不是物理删除,而是逻辑删除。那么在展示数据的时候需要过滤掉已删除的数据。@Where 注解可以说就是为此而设计的。...从表根据主表的主键(列名为referencedColumnName值的),建立一个类型一样的主键,列名由name属性定义。...one2one关系,关系维护端的主键作为外键指向关系被维护端的主键,不再新建一个外键 元数据属性说明: name:列名。

    3.9K20

    SpringBoot代码生成器,从此不用手撸代码

    如果开发前没有强制的约束,每个程序员都有自己的编码习惯,最终会导致一个项目呈现出多种编码风格。再有就是一些CRUD的列表功能,基本是没啥挑战性的,纯粹苦力活,浪费时间。...所以,根据公司现有框架,开发一款统一风格的代码生成器还是很有必要的。...技术选型 开发框架:SpringBoot+JPA,考虑到会生成各种前后端代码文件,这里我们选用freemarker模板引擎来制作相应的模板。...*/ private String entityName; /** * 实体类名 首字母小写 */ private String lowerEntityName...){ return ${function}Service.delete(id); } } 说白了其实就是传递参数,把一些可变的代码片段使用${name}形式编写。

    4K20

    第13章 Kotlin 集成 SpringBoot 服务端开发(1)第13章 Kotlin 集成 SpringBoot 服务端开发

    项目的整体依赖 我们可以看出,spring-boot-starter-web 中已经引入了我们所需要的 json 、tomcat 、validator 、webmvc (其中引入了Spring框架核心...主键自动生成策略 我们使用@Id 注解来标注主键字段 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long = -1...这里的GenerationType是主键 ID 的生成规则。...这里的 JPQL 我们使用#{#entityName} 代替本来实体的名称,Spring Data JPA 会自动根据 Image 实体上对应的 @Entity(name = "Image") 或者是默认的...默认的 #{#entityName} 的值就是 Image ,如果指定其中的@Entity(name = "Image") name 的值,那么 #{#entityName} 就是指定的值。

    2.8K30

    如何给个数据库就可自动生成完整后台系统,可视化添加定制功能?达到摸鱼神之境?

    管理系统的面貌就是功能重复、量大、管饱。可看似功能类型,却总不是重复的所以总是要将这些类似的功能一个一个一遍一遍的手动开发,就会消耗大量的时间与人力。...java 者的尤甚,前端生成工具的略少,也许是框架层出不穷缘故,我所知有若依之列。然后试了一下确实可以,不过要一个一个生成然后解压复制到本地对应目录,当数据表数量达到半步百张之境还是让人头疼不已。...随之而来的是,事实上每个页面并不是纯增删改查之能,如:没有删除功能、没有查询行、某字段不可以编辑、A 数据依赖 B、操作按状态展示、有审批功能等等。...` int(11) NOT NULL AUTO_INCREMENT,    `student_id` int(11) NULL DEFAULT NULL,    `grade_name` varchar...` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',    `student_name` varchar(11) CHARACTER SET utf8 COLLATE

    38831

    Spring认证中国教育管理中心-Spring Data JPA 参考文档五

    entityName解决如下:如果域类型已设置的name属性@Entity的注释,它被使用。否则,将使用域类型的简单类名。...1") List findByLastname(String lastname); } 为了避免在@Query注释的查询字符串中声明实际的实体名称,您可以使用该#{#entityName}...对 的引用将#entityName未来可能的User类重新映射到不同的实体名称(例如,通过使用@Entity(name = "MyUser")....2") int setFixedFirstnameFor(String firstname, String lastname); 这样做会触发注释到方法的查询作为更新查询不是选择查询。...作为EntityManager可能的修改查询执行后包含过时的实体,我们不会自动清除它(见的JavaDoc的EntityManager.clear()详细内容),因为这有效地删除所有非刷新的变化仍悬而未决的

    1.7K20

    Jpa使用详解

    JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体不是关系数据库的表,而且能够支持批量更新和修改...属性: name:指定数据库表的名称 @Id 作用:指定当前字段是主键。...如果此列不建在主表上(默认建在主表),该属性定义该所在从表的名字搭建开发环境[重点] 第六步:配置JPA的核心配置文件 在java工程的resources路径下创建一个名为META-INF的文件夹,在此文件夹下创建一个名为...JPA主键生成策略 通过annotation(注解)来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue设定的.这里的...例如在“tb_generator”中将“gen_name作为主键的键值 String pkColumnName() default ""; //属性的值表示在持久化表中,该主键当前所生成的值

    3.2K20

    如何在 Spring Boot 中 读写数据

    一种以 SQL 为核心,封装一定程度的 JDBC 操作,比如: MyBatis 框架。...另一种是以 Java 实体类为核心,建立实体类和数据库表之间的映射关系,也就是ORM框架,比如:Hibernate、Spring Data JPA。 ?...(2)@Table(name = "自定义表名") 类注解,用于自定义实体类在数据库中所对应的表名,默认是实体类名。特别是那些被作为数据库关键字的实体类名,就会用到这个注解来指定表名。...(3)@Id 类变量注解,用于指定主键。 (4)@GeneratedValue 类变量注解,用于指定主键的生成策略。 它包含strategy属性,具体说明如下: ?...,字段默认的命名规则为 “附属类名_附属主键”,如:password_id

    15.9K10

    微服务项目:尚融宝(4)(上手复习mybatisplus)

    1、雪花算法 默认情况下数据库的id使用的是基于雪花算法的策略生成 背景 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。...2、指定主键 测试:将数据库表中的id改为 uid,将实体类中的id属性改成 uid,执行数据插入,则报告如下错误 原因:因为MP默认认为id主键,其他名字的属性MP无法默认自动填充 解决方案...:为主键添加 @TableId 注解 3、value属性 实体类的属性名是 id,数据库的列名是 uid,此时使用 value 属性将属性名映射到列名 @TableId(value = "uid")...updateTime; 扩展知识:为什么建议使用你 LocalDateTime ,不是 Date?...为什么建议使用你 LocalDateTime ,不是 Date?

    44920

    day29_Hibernate学习笔记_01

    Hibernate 是使用javassist-3.12.0.GA.jar 产生动态代理对象的。    该代理与被代理对象之间的关系是继承关系,与我们学的动态代理不是一种。所以不需要接口。...6.3、区分自然主键和代理主键 主键需要具备: 不为空/不能重复/不能改变 自然主键:在业务中,某个属性符合主键的三个要求,那么该属性可以作为主键。...代理主键:在业务中,不存符合以上3个条件的属性,那么就增加一个没有意义的作为主键。 6.4、基本数据与包装类型 基本数据类型和包装类型对应hibernate的映射类型相同。...,不是操作get/set方法,破坏了面向对象的封装性(get/set方法中会有一些逻辑控制)             column=""   主键在表中的列名             length="...                1.increment 数据库自己生成主键,先从数据库中查询最大的ID值,将ID值加1作为新的主键,不建议使用,存在线程并发问题                 2.identity

    1.1K20

    SpringDataJPA 系列之 JPA 简介

    JPA 定义了独特的 JPQL(Java Persistence Query Language),JPQL 是 EJB QL 的一种扩展,它是针对实体的一种查询语言,操作对象是实体不是关系数据库的表...我们选择 Hibernate 作为 JPA 的提供商,所以需要导入 Hibernate 的相关 jar 包。 <!...通过输出的日志可以发现,JPA 会先将与实体类同名的表删除,然后依据实体类创建一个表,接着将数据插入新创建的表中。这是怎么回事,那不是数据库永远只有一条数据?...@Table 指定实体类和表之间的对应关系,不指定则默认表名为类名全小写 name:指定数据库表的名称 @Id 指定当前字段是主键 @GeneratedValue 指定主键的生成方式 strategy...实体类,基于注解的 hibernate 主键标识为 @Id,其生成规则由 @GeneratedValue 设定的。

    4.4K20

    什么是JPA_论文题目不能用浅谈吗

    JPA提供的技术: ORM映射元数据:JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中; JPA 的API:定义规范,以操作实体对象...实体生命周期 New,新创建的实体对象,没有主键(identity)值 Managed,对象处于Persistence Context(持久化上下文)中,被EntityManager管理 Detached...ID生成策略 ID对应数据库表的主键,是保证唯一性的重要属性。...例如: @TableGenerator( name=“myGenerator”, table=“GENERATORTABLE”, pkColumnName = “ENTITYNAME”, pkColumnValue...– @Column(name = “columnname”) property primary key @Id @GeneratedValue 详见ID生成策略 property NONE @Transient

    1.6K20

    MybatisPlus常用注解

    1、雪花算法 默认情况下数据库的id使用的是基于雪花算法的策略生成 背景 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。...*雪花算法:* 雪花算法是由Twitter公布的分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表的主键的有序性。 核心思想: 长度共64bit(一个long型)。...2、指定主键 测试:将数据库表中的id改为 uid,将实体类中的id属性改成 uid,执行数据插入,则报告如下错误 原因:因为MP默认认为id主键,其他名字的属性MP无法默认自动填充 解决方案:...为主键添加 @TableId 注解 3、value属性 实体类的属性名是 id,数据库的列名是 uid,此时使用 value 属性将属性名映射到列名 @TableId(value = "uid") private...updateTime; 扩展知识:为什么建议使用你 LocalDateTime ,不是 Date?

    24910

    什么是JPA?Java Persistence API简介

    JPA本身不是一个工具或框架; 相反,它定义了一组可以由任何工具或框架实现的概念。虽然JPA的对象关系映射(ORM)模型最初基于Hibernate,但它已经发展了。...King开发了Hibernate作为持久化实体bean的替代品。该框架非常受欢迎,当时非常需要,它的许多想法都在第一个JPA规范中被采用和编纂。...像Hibernate ORM或EclipseLink这样的框架将该任务编码为库或框架,即ORM层。作为应用程序体系结构的一部分,ORM层负责管理软件对象的转换,以便与关系数据库中的表和进行交互。...您可以定义对象和数据库之间的映射,不是定义对象的保存和检索方式,然后调用JPA来保存它们。...在清单6中,我们告诉JPA要使用哪个字段作为Musician主键

    10.2K30
    领券