可能经常遇到这样的情况:
在数据库表中会有这样的一个字段用来区别记录的属性,如:在客户表中有一个字段表示客户级别,当这个记录为A时是一级客户,为B时是二级客户。在用 hiberante做OR表示时类可能是这样的:
public class Customer{
private String flag; //表示客户的级别
...
}
然后,在程序中手动控制flag的值,但是这样当每个级的客户有不同的属性时Customer类将包含所有级别的属性,这样不是很好。
hibernate提供一个Discriminator映射的方法,就是把一个表映射成不同的类,有不同的属性。
public class Customer{
//包含所有级别的公共属性
...
}
public class CustomerA extends Customer{
//只包括一级客户的特有属性
}
public class CustomerB extends Customer{
//只包含二级客户特有的属性
}
这样更符合面向对象的原则,然后在hbm.xml中这样写:
<id name="id" type="int">
...
</id>
<discriminator column="flag" type="string" />
<!-- 公共属性的映射 -->
<subclass name="CustomerA" discriminator-value="A">
<!-- 一级客户特有属性的映射 -->
</subclass>
<subclass name="CustomerB" discriminator-value="B">
<!-- 二级客户特有属性的映射 -->
</subclass>
这样就可以单独的用CustomerA,CustomerB这样的实例了,做数据库修改时 就不用关心flag字段的值了,会自动的加A或B。
如果是使用hibernate Annotation而不是xml来描述映谢关系,代码如下:
@Entity
@Table(name = "customer")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "flag", discriminatorType = DiscriminatorType.STRING)
public class Customer{
}
@Entity
@DiscriminatorValue(value = "A")
public class CustomerA extends Customer{
}
@Entity
@DiscriminatorValue(value = "B")
public class CustomerB extends Customer{
}
这样就可以了。
分享到:
相关推荐
综合以上,这个压缩包内容涉及到的IT知识主要包括数据压缩技术、生物信息学分析、统计学方法(如P-value计算和假设检验)、以及数据可视化(如QQ图)。这些知识在现代遗传学研究中扮演着核心角色,帮助科学家揭示...
本文主要介绍了使用R语言和ggplot2包绘制更多分位数的箱线图letter-value的方法,并对其优势进行了详细的解释。箱线图是一种常用的数据可视化方法,但是它在展示数据分布时往往存在局限性,例如异常值多、数据分布不...
赠送jar包:spring-data-keyvalue-2.5.5.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
针对以上问题,提出一种基于key-value数据库的快速地名地址输入提示方法。该方法基于Trie树结构进行改进,降低了地址索引的复杂度;基于key-value数据库构建Trie树,避免了内存消耗巨大的问题。实验结果表明,基于...
想要明白什么是key/value数据库,就必须了解哈希表(Hash Table)这种数据结构。 比如,Berkley DB就是典型的key/value数据库。
1. **ng-value基本用法** ng-value指令的语法是在HTML元素上添加`ng-value`属性,并将AngularJS表达式作为其值。例如: ```html <input type="text" ng-value="myModel"> ``` 这里,`myModel`是AngularJS中的一...
赠送jar包:spring-data-keyvalue-2.3.9.RELEASE....使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
stylelint-z-index-value-constraint 用于设置z索引的最小和最大约束值的Stylelint规则。 这是插件的分支。 安装 npm install stylelint-z-index-value-constraint --save-dev 或者 yarn add stylelint-z-index-...
分布式key-value存储系统入门,详细介绍cassandra系统
在描述中提到的`AngularJS ng-value 指令____AngularJS 实例.zip`文件,可能包含了多个示例,如`AngularJS ng-value 指令____AngularJS 实例.pdf`,该文档很可能详细解释了`ng-value`的用法,并提供了代码实例。...
赠送jar包:spring-data-keyvalue-2.0.9.RELEASE.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心
gkvlite, go语言的简单有序key-value 持久库 gkvlitegkvlite是一个简单。有序。ACID 。key-value 持久化库。 概述gkvlite是一个提供简单 key-value 持久性存储的库,它受SQLite和 couchdb/couchstore启
赠送jar包:spring-data-keyvalue-2.6.1.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
“Key-Value_Memory_Networks_for_Directly_Reading_Do_key-value-MemNN
Key-Value数据模型是一种简单的非关系型数据存储模型,它使用键值对, value>的方式存储数据,其中key是唯一标识符,value是与之对应的值。这种模型的特点是数据结构简单,查询和插入操作效率高。在云计算和大数据...
用法 var unset = require ( 'unset-value' ) ; unset ( obj , prop ) ; 参量 obj {对象}:该对象到未设置prop上 prop {string | string []} :要设置的属性。 可以使用点符号或嵌套属性的数组。 例子 删除属性时...
在实际应用中,我们可以像使用普通Kotlin对象一样来操作这个Key-Value存储: ```kotlin val store = FileKeyValueStore(applicationContext, "my_store") store["key1"] = "value1" val value1 = store["key1"] ```...