一、实体类的编写规则

  1、属性要是私有的。

    

  2、要有公开的setter和getter方法供外界访问和修改。

    

  3、每一个实体类要有一个属性作为唯一值(一般都是使用对于数据表的主键)。

    

  4、建议数据类型不要使用基本的数据类型,而是使用相应的包装类。

    

  5、Java中对应的包装类

基本数据类型 对应包装类
int Integer
char Character
boolean Boolean
float Float
double Double
short Short
long Long
byte Byte

    使用包装类的原因:因为有时候使用基本数据类型无法准确表示一些场景。

             例:score代表学生的成绩,但是在考试时可能存在缺考的情况,如果使用int数据类型,则score = 0表示考了分,但是缺考还是score =

               0,这样无法区分;如果使用Integer,则要是缺考,score = null;这样就可以区分是考了0分还是缺考。

二、主键生成策略

    1、Hibernate要求在一个实体中必须要有一个属性作为唯一值,这个唯一值一般都对应表中的主键。

    2、主键分类

      自然主键:把具有业务含义的字段作为主键,称之为自然主键。

      代理主键:把不具有业务含义的字段作为主键,称之为代理主键。

    3、主键的常见生成策略有七种

      (1)increment :用于long、short或int类型的,由Hibernate自动由递增的方式生成唯一标识符,每次增长1.

               只有当没有其他线程向同一张表中插入数据时使用。不能在集群情况下使用,适用于代理主键。

      (2)identity:采用底层数据库提供的本身提供的主键生成标识符,前提是数据库必须支持自增长的数据类型。

              在DB2、mysql、MS SQL SERVER、Sybase和HypersonicSQL数据库中可以使用该策略,该策略

              要求在数据库中把主键定义为自增长,适用于代理主键。

      (3)sequence:Hibernate根据底层数据库序列生成标识符。条件是数据库要支持序列,Oracle数据库可以使用该策略

               适用于代理主键。

      (4)hilo:hilo:通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。

      (5)native:根据底层数据库对自动生成表示符的能力来自动选择identity、sequence和hilo三种生成器中的一种。

              适合跨数据库平台开发,适用于代理主键。

      (6)uuid:Hibernate采用128位的UUID来生成字符,使用16进制表示,使用该策略时主键必须定义为String类型,

             由于其所占的空间较多,使用较少,适用于代理主键。

      (7)assigned:由Java程序负责生成标识符,如果在配置文件中不配置<generator></generator>标签,则默认为

              该策略,适用于自然主键。

Hibernate实体类编写规则和主键策略的更多相关文章

  1. Hibernate的映射文件中基于主键的双向1对1的关联

    1.Hibernate中采用基于主键的映射策略是,有一端(任意一端)的主键生成策略要是foreign,根据对方的主键来生成自己的主键,它的实体不能拥有自己的主键生成策略,如我的配置文件: <?x ...

  2. 因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 。。。

    因为相同类型的其他实体已具有相同的主键值.在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified&quo ...

  3. Hibernate 主键策略

    Hibernate主键生成策略 .自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL ...

  4. 关于Entity Framework更新的几种方式以及可能遇到的问题(附加类型“Model”的实体失败,因为相同类型的其他实体已具有相同的主键值)在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为

    在日常使用Entity Framework中,数据更新通常会用到.下面就简单封装了一个DBContext类 public partial class EFContext<T> : DbCo ...

  5. 附加类型“UniversalReviewSystem.Models.ApplicationUser”的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值

    在使用asp.net Identity2 的 UserManager RoleManager 时,同时还有其他仓储类型接口,能实现用户扩展信息的修改,用户注册没有问题.当修改用户信息时,出现了如下异常 ...

  6. hibernate.hbm.xml必须必须配置主键

    hibernate.hbm.xml必须必须配置主键 <id name="XXid" type="java.lang.long" column=" ...

  7. Spring boot JPA 用自定义主键策略 生成自定义主键ID

    最近学习Spring boot JPA 学习过程解决的一些问题写成随笔,大家一起成长.这次遇到自定义主键的问题 package javax.persistence; public enum Gener ...

  8. JPA主键策略

    JPA 自带的主键策略有 4 种,在枚举 javax.persistence.GenerationType 中,分别是:TABLE.SEQUENCE.IDENTITY.AUTO. TABLE:通过表产 ...

  9. Mybatis-Plus默认主键策略导致自动生成19位长度主键id的坑

    原创/朱季谦 某天检查一位离职同事写的代码,发现其对应表虽然设置了AUTO_INCREMENT自增,但页面新增功能生成的数据主键id很诡异,长度达到了19位,且不是从1开始递增的-- 我检查了一下,发 ...

随机推荐

  1. leetcode 字符串中的第一个唯一字符

    给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = "leetcode" 返回 0. s = "loveleetcod ...

  2. RabbitMQ与.net core(四) 消息的优先级 与 死信队列

    1.消息的优先级 假如现在有个需求,我们需要让一些优先级最高的通知推送到客户端,我们可以使用redis的sortedset,也可以使用我们今天要说的rabbit的消息优先级属性 Producer代码 ...

  3. Windows server 2008 R2中安装MySQL !

    我今天打算在Windows server 2008 R2中安装MySQL,可是总是发现ODBC连接器安装错误,无论我采用MySQL的整体安装包,还是单独的ODBC连接器安装文件!! 最后上网搜索了很久 ...

  4. 初探UE4中的Profiling【转】

    http://blog.ch-wind.com/ue4-profiling-preview/ Profililng是成品制作过程中非常重要的一个步骤,通过Profiling才能提高运行效率使得作品达到 ...

  5. 关于C#低版本升级高版本时,项目中引用Microsoft.Office.Interop.Word,程序提示不存在类型或命名空间名office.

    Report.cs里using Microsoft.Office.Interop.Word;就会报错:编译器错误消息: CS0234: 命名空间“Microsoft.Office”中不存在类型或命名空 ...

  6. shell 中 exit0 exit1 的区别

    exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: exit 0 可以告知你的程序的使用者:你的程序是正常结束的.如果 exit 非 0 值,那么你的程序的使用者通常会 ...

  7. PHP网上支付

    1,网上支付方式两类:企业与银行对接和通过中间公司间接与银行对接. (1),企业与银行对接,优点:因为直接与银行进行财务结算,交易资金结算比较安全.适合资金流量比较大的企业,这种方案适合于,每月结算金 ...

  8. TCP/IP协议之分层

     应用层和运输层只在端系统(End System)中实现, 底层协议在中间系统(Intermediate System)实现 ICMP和IGMP属于网络层的附属协议.虽然其内容是IP数据报的载荷(P ...

  9. numpy之转置(transpose)和轴对换

    转置(transpose)和轴对换 转置可以对数组进行重置,返回的是源数据的视图(不会进行任何复制操作). 转置有三种方式,transpose方法.T属性以及swapaxes方法. 1 .T,适用于一 ...

  10. 【UVA11324】 The Largest Clique (Tarjan+topsort/记忆化搜索)

    UVA11324 The Largest Clique 题目描述 给你一张有向图 \(G\),求一个结点数最大的结点集,使得该结点集中的任意两个结点 \(u\) 和 \(v\) 满足:要么 \(u\) ...