首页 > 其他分享 >实体(Entities)和值(values)

实体(Entities)和值(values)

时间:2023-04-12 13:01:59浏览次数:34  
标签:java 映射 实体 imm Entities values 类型 Java


实体(Entities)和值(values)



为了理解很多与持久化服务相关的Java语言级对象的行为,我们需要把它们分为两类:

实体entity 独立于任何持有实体引用的对象。与通常的Java模型相比,不再被引用的对象会被当作垃圾收集掉。实体必须被显式的保存和删除(除非保存和删除是从父实体向子实体引发的级联)。这和ODMG模型中关于对象通过可触及保持持久性有一些不同——比较起来更加接近应用程序对象通常在一个大系统中的使用方法。实体支持循环引用和交叉引用,它们也可以加上版本信息。

一个实体的持久状态包含指向其他实体和类型实例的引用。值可以是原始类型,集合(不是集合中的对象),组件或者特定的不可变对象。与实体不同,值(特别是集合和组件)是通过可触及性来进行持久化和删除的。因为值对象(和原始类型数据)是随着包含他们的实体而被持久化和删除的,他们不能被独立的加上版本信息。值没有独立的标识,所以他们不能被两个实体或者集合共享。

直到现在,我们都一直使用术语“持久类”(persistent class)来代表实体。我们仍然会这么做。 然而严格说来,不是所有的用户自定义的,带有持久化状态的类都是实体。组件就是用户自定义类,却是值语义的。java.lang.String类型的java属性也是值语义的。给了这个定义以后,我们可以说所有JDK提供的类型(类)都是值类型的语义,而用于自定义类型可能被映射为实体类型或值类型语义。采用哪种类型的语义取决于开发人员。在领域模型中,寻找实体类的一个好线索是共享引用指向这个类的单一实例,而组合或聚合通常被转化为值类型。

我们会在本文档中重复碰到这两个概念。

挑战在于将java类型系统(和开发者定义的实体和值类型)映射到 SQL/数据库类型系统。Hibernate提供了连接两个系统之间的桥梁:对于实体类型,我们使用<class>, <subclass> 等等。对于值类型,我们使用 <property>, <component> 及其他,通常跟随着type属性。这个属性的值是Hibernate 的映射类型的名字。Hibernate提供了许多现成的映射(标准的JDK值类型)。你也可以编写自己的映射类型并实现自定义的变换策略,随后我们会看到这点。

所有的Hibernate内建类型,除了collections以外,都支持空(null)语义。



5.2.2. 基本值类型



内建的 基本映射类型可以大致分为



integer, long, short, float, double, character, byte, boolean, yes_no, true_false

这些类型都对应Java的原始类型或者其封装类,来符合(特定厂商的)SQL 字段类型。boolean, yes_notrue_false都是Java 中boolean 或者java.lang.Boolean的另外说法。

string


java.lang.StringVARCHAR (或者 Oracle的 VARCHAR2)的映射。

date, time, timestamp


java.util.Date和其子类到SQL类型DATE, TIMETIMESTAMP (或等价类型)的映射。

calendar, calendar_date


java.util.Calendar 到SQL 类型TIMESTAMPDATE(或等价类型)的映射。

big_decimal, big_integer


java.math.BigDecimaljava.math.BigIntegerNUMERIC (或者 Oracle 的NUMBER类型)的映射。

locale, timezone, currency


java.util.Locale, java.util.TimeZonejava.util.CurrencyVARCHAR (或者 Oracle 的VARCHAR2类型)的映射. LocaleCurrency 的实例被映射为它们的ISO代码。TimeZone的实例被影射为它的ID

class


java.lang.ClassVARCHAR (或者 Oracle 的VARCHAR2类型)的映射。Class被映射为它的全限定名。

binary


把字节数组(byte arrays)映射为对应的 SQL二进制类型。

text


把长Java字符串映射为SQL的CLOB或者TEXT类型。

serializable


把可序列化的Java类型映射到对应的SQL二进制类型。你也可以为一个并非默认为基本类型的可序列化Java类或者接口指定Hibernate类型serializable

clob, blob


JDBC 类 java.sql.Clobjava.sql.Blob的映射。某些程序可能不适合使用这个类型,因为blob和clob对象可能在一个事务之外是无法重用的。(而且, 驱动程序对这种类型的支持充满着补丁和前后矛盾。)

imm_date, imm_time, imm_timestamp, imm_calendar, imm_calendar_date, imm_serializable, imm_binary


一般来说,映射类型被假定为是可变的Java类型,只有对不可变Java类型,Hibernate会采取特定的优化措施,应用程序会把这些对象作为不可变对象处理。比如,你不应该对作为imm_timestamp映射的Date执行Date.setTime()。要改变属性的值,并且保存这一改变,应用程序必须对这一属性重新设置一个新的(不一样的)对象。



实体及其集合的唯一标识可以是除了binaryblobclob之外的任何基础类型。(联合标识也是允许的,后面会说到。)

org.hibernate.Hibernate中,定义了基础类型对应的Type常量。比如,Hibernate.STRING代表string 类型。

标签:java,映射,实体,imm,Entities,values,类型,Java
From: https://blog.51cto.com/u_16065168/6185496

相关文章

  • Autosar系列之Runnable可运行实体
    文章目录一、RUnnableEntity一、RUnnableEntity可运行实体,其实就是.C文件内的函数而已。一个SWC可以包含多个RunnableEntity,就是一个.C文件中可以包含多个函数,每个函数可以执行一个特定的操作并且RunnableEntity必须要挂子Task上,就像函数如果只是放在那里没有被调用的化,也不起......
  • 用驼峰的实体类接受命名不规范的响应参数
    参考资料地址:https://blog.csdn.net/qq_41143240/article/details/115671561使用JsonProperty注解importcom.alibaba.fastjson.JSON;importcom.fasterxml.jackson.annotation.JsonProperty;importlombok.Data;importjava.util.HashMap;/***用驼峰的实体类接受命......
  • JAVA实体类-自定义Getter Setter
    ###案例一整个购物车存放的商品信息需要计算的属性需要重写get方法,保证每次获取属性都会进行计算privateBigDecimaltotalPrice;/***计算当前购物项总价*@return*/publicBigDecimalgetTotalPrice(){//等于单价*数量returnthis.price.multiply(......
  • 35.将多实体文件保存成单个零件
    一、基本参数1.定义:通过插入新零件的方式可将多实体零件的部分实体单独保存成零件 二、基本操作及内容1.点击命令 2.参数信息 3.原部件与导出实体的关系4.单位是否沿用原部件的  ......
  • 使用DbContext.Set<TEntity>()方法也可以对数据库实体进行CRUD操作
    我们可以用DbContext.Set<TEntity>()方法获取到一个DbSet<TEntity>对象,从而对泛型TEntity类所代表的数据库表进行CRUD操作。例如我们现在有数据库表和TEntity类Person,那么下面两种写法是完全等价的:dbContext.Persons.Take(10).ToList();//dbContext.Persons等于dbContext.Set<P......
  • SqlServer数据库表生成C# Model实体类SQL语句
    DECLARE@TableNamesysname='tb_Customer';DECLARE@ResultVARCHAR(MAX)='publicclass'+@TableName+'{';SELECT@Result=@Result+'///<summary>///'+CAST(t.SummaryASVARCHAR(MAX))+&#......
  • 31.删除保留实体(删除不需要的实体而不影响主体的结构)
    一、基本参数1.定义:使用删除/保留实体特征选择要保留或删除的实体。这在与具有多个配置的多实体零件一起使用时非常有用二、操作演示1.打开命令2.点击删除实体命令,则实体被删除 3.点击保留实体后,除了选择的实体,其余实体被被删除  4.实体删除影响默认体积及质量,可......
  • 时序预测Time Series Forecasting:实体店销售
    ​1.探索性数据分析:在这个时间序列的"入门"比赛中,我们被要求预测来自CorporaciónFavorita的商店销售数据,这是一家位于厄瓜多尔的大型杂货零售商。我们需要一个能够预测不同商店所销售的数千种商品的单位销售额的模型。在这次比赛中,我们有不同的数据集,描述了厄瓜多尔2013年......
  • 巧用spt_values解决SQL中的连续日期问题
    spt_values是什么spt_values是SQLServer系统数据库master下中的一个表,表里面都是一些枚举数据。我们可以通过如下查询语句来查看里面的数据select*frommaster..spt_values spt_values连续记录但是通常我们使用的是Type='P'的数据记录,这些记录是一组从0开始,2047为止的......
  • 实体类的分层设计
    在实际开发中,为了传递参数方便或保护数据安全或组合复杂的参数等,有时会对实体类进行分层设计,经常把实体类分为VO、DTO、DO和PO等对象。⚫VO(ViewObject):视图对象,用于展示层,指把某个指定页面(或组件)需要的所有数据封装起来;⚫DTO(DataTransferObject):数据传输对象,用于展......