- 浏览: 1214264 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (434)
- js (20)
- struts2 (77)
- spring (11)
- hibernate (17)
- ssh整合 (9)
- 程序例子 (4)
- 正则表达式 (8)
- JSP (20)
- IDE (15)
- 数据库 (10)
- 工作经验技巧感悟 (21)
- 程序员的幽默 (4)
- windows设置 (4)
- 名词解释 (4)
- 技术入门 (4)
- jFreeChart (16)
- OGNL (5)
- java基础 (46)
- dwr (4)
- portal (1)
- 示例用到的附件 (0)
- 优秀程序员45个习惯 (1)
- webService (1)
- shell (3)
- ibatis (3)
- 开发工具 (1)
- OS (3)
- xmlbean (2)
- design_pattern (0)
- error (1)
- testng (2)
- python (18)
- hadoop (21)
- mapreduce (9)
- Hive (0)
- HBase (0)
- ubuntu (22)
- 多线程 (7)
- 自我改进 (6)
- 设计模式 (1)
- ssh (2)
- ant (4)
- guake (2)
- 云计算 (9)
- hdfs (3)
- 大数据 (1)
- 电信业务 (1)
- maven (2)
- svn (5)
- UML (1)
- 待处理问题 (2)
- log4j (1)
- css (1)
- LevelDb (0)
- thrift (6)
- 辅助工具 (3)
- 算法 (1)
- tornado (0)
- twisted (1)
- jvm (0)
- 图书 (1)
- 其他 (1)
- oracle (2)
- mvn (1)
- 私人信息 (0)
- nio (1)
- zookeeper (1)
- JavaIO (3)
- mongodb (1)
- java-高级 (6)
- spring-深入 (1)
- tomcat (1)
- quartz (1)
- 面试题 (1)
- redis (3)
- EJBCA (0)
- spring-3.0 (1)
- memcache (3)
- 性能检测 (1)
- android (0)
- 开源项目 (1)
- 将博客搬至CSDN (0)
- 架构之路 (1)
最新评论
-
pjwqq:
“子类对象”都拥有了“父类对象的一个实例的引用”我晕,应该是“ ...
java继承--父类属性的存放位置 -
gwgyk:
关于楼主最后的问题,我想可能是这样:InputFormat默认 ...
eclipse 运行hadoop wordcount -
fanjf:
上述7点基本具备,可惜现在因为项目需要,做管理方面工作!
如何判断自己是否具有成为一名优秀程序员的潜质 -
摸爬滚打NO1:
链接已经失效
Eclipse添加JSEclipse 插件(js插件) -
younglibin:
看了以上7条, 自己 也不知道是否能够对上, 感觉没一点都有那 ...
如何判断自己是否具有成为一名优秀程序员的潜质
今天遇到一个问题:
客户给了我 3张表;
这三张表 分别是从其他数据库中查出来的数据:
这三张表都没有 id 这个字段:
分别为 A B C 三张表:
在进行hibernate 查询时 ,可以查询 ,但是 更新数据时,就会出现 找不到 id唯一标识 的 错误:
这样 我就为每一个表 在hibernate 映射文件中 添加了联合主键:(来欺骗hibernate 主键);
这样的 单表可以查了! 但是 这三个 表关联到一起 就不行:
这是我的配置文件: 我配置了 所有的属性 都作为 联合主键 (大虾 们可以修改 )
(联合主键 也可以是 其中的几个字段)eg:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
This mapping of imain base component
-->
<hibernate-mapping>
A : 表字段:
<class name="com.iman.nrms.nrmwns.wrm.domain.model.CardType" table="VAL_CARD_TYPES">
<composite-id>
<key-property name="name" type="java.lang.String">
<column name="TYPE_NAME" length="50" not-null="true" />
</key-property>
<key-property name="realOrder" type="java.lang.Integer">
<column name="REL_ORDER" length="6"/>
</key-property>
<key-property name="subCard" type="java.lang.String">
<column name="VAL_FOR_SUB_CARD" length="100" />
</key-property>
</composite-id>
</class>
B: 表字段:
<class name="com.iman.nrms.nrmwns.wrm.domain.model.NeToCard" table="EQ_CARD_TYPE_MAP">
<composite-id>
<key-many-to-one name="cardName" column="CARD_TYPE" class="com.iman.nrms.nrmwns.wrm.domain.model.CardType">
</key-many-to-one>
<key-many-to-one name="equipName" column="EQUIP_TYPE" class="com.iman.nrms.nrmwns.wrm.domain.model.NeType">
</key-many-to-one>
<key-property name="realOrder" type="java.lang.Integer">
<column name="REL_ORDER" length="6"/>
</key-property>
</composite-id>
</class>
C: 表字段:
<class name="com.iman.nrms.nrmwns.wrm.domain.model.NeType" table="EQUIP_TYPES">
<composite-id>
<key-property name="name" type="java.long.String">
<column name="TYPE_NAME" length="30" not-null="true"/>
</key-property>
<key-property name="iconName" type="java.long.String">
<column name="ICON_NAME" length="30"/>
</key-property>
<key-property name="realOrder" type="java.lang.Integer">
<column name="REL_ORDER" length="3"/>
</key-property>
<key-property name="suggBeg" type="java.lang.Integer">
<column name="SUGG_BEG4" length="3"/>
</key-property>
<key-property name="suggEnd" type="java.lang.Integer">
<column name="SUGG_END4" length="3"/>
</key-property>
<key-property name="swapCols" type="java.long.String">
<column name="SWAP_CARD_RESERVED_COLS" length="2000"/>
</key-property>
</composite-id>
</class>
</hibernate-mapping>
注意: B 表算是一个中间表: 通过 A , C 表的联合主键 在B 表建立联系, 更新A C 表中的数据;
单表的查询 和 更新都是没有问题的,可是 多表连接后就不行!
再次强调: A ,B C 三个表中 是没有 Id 只有 联合主键(这里的配置文件也可以修改,可以 )
注意 B 表中 多对一 关联关系
算是个方法!还有 简单的嘛?
客户给了我 3张表;
这三张表 分别是从其他数据库中查出来的数据:
这三张表都没有 id 这个字段:
分别为 A B C 三张表:
在进行hibernate 查询时 ,可以查询 ,但是 更新数据时,就会出现 找不到 id唯一标识 的 错误:
这样 我就为每一个表 在hibernate 映射文件中 添加了联合主键:(来欺骗hibernate 主键);
这样的 单表可以查了! 但是 这三个 表关联到一起 就不行:
这是我的配置文件: 我配置了 所有的属性 都作为 联合主键 (大虾 们可以修改 )
(联合主键 也可以是 其中的几个字段)eg:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
This mapping of imain base component
-->
<hibernate-mapping>
A : 表字段:
<class name="com.iman.nrms.nrmwns.wrm.domain.model.CardType" table="VAL_CARD_TYPES">
<composite-id>
<key-property name="name" type="java.lang.String">
<column name="TYPE_NAME" length="50" not-null="true" />
</key-property>
<key-property name="realOrder" type="java.lang.Integer">
<column name="REL_ORDER" length="6"/>
</key-property>
<key-property name="subCard" type="java.lang.String">
<column name="VAL_FOR_SUB_CARD" length="100" />
</key-property>
</composite-id>
</class>
B: 表字段:
<class name="com.iman.nrms.nrmwns.wrm.domain.model.NeToCard" table="EQ_CARD_TYPE_MAP">
<composite-id>
<key-many-to-one name="cardName" column="CARD_TYPE" class="com.iman.nrms.nrmwns.wrm.domain.model.CardType">
</key-many-to-one>
<key-many-to-one name="equipName" column="EQUIP_TYPE" class="com.iman.nrms.nrmwns.wrm.domain.model.NeType">
</key-many-to-one>
<key-property name="realOrder" type="java.lang.Integer">
<column name="REL_ORDER" length="6"/>
</key-property>
</composite-id>
</class>
C: 表字段:
<class name="com.iman.nrms.nrmwns.wrm.domain.model.NeType" table="EQUIP_TYPES">
<composite-id>
<key-property name="name" type="java.long.String">
<column name="TYPE_NAME" length="30" not-null="true"/>
</key-property>
<key-property name="iconName" type="java.long.String">
<column name="ICON_NAME" length="30"/>
</key-property>
<key-property name="realOrder" type="java.lang.Integer">
<column name="REL_ORDER" length="3"/>
</key-property>
<key-property name="suggBeg" type="java.lang.Integer">
<column name="SUGG_BEG4" length="3"/>
</key-property>
<key-property name="suggEnd" type="java.lang.Integer">
<column name="SUGG_END4" length="3"/>
</key-property>
<key-property name="swapCols" type="java.long.String">
<column name="SWAP_CARD_RESERVED_COLS" length="2000"/>
</key-property>
</composite-id>
</class>
</hibernate-mapping>
注意: B 表算是一个中间表: 通过 A , C 表的联合主键 在B 表建立联系, 更新A C 表中的数据;
单表的查询 和 更新都是没有问题的,可是 多表连接后就不行!
再次强调: A ,B C 三个表中 是没有 Id 只有 联合主键(这里的配置文件也可以修改,可以 )
注意 B 表中 多对一 关联关系
评论
5 楼
younglibin
2010-01-31
san586 写道
十二郎的解决方案:hibernate支持视图,就是说你可以将你的几张表通过数据库建立3个视图,其中视图中可以有ID字段了。然后在项目中同对待表一样的进行查询。
算是个方法!还有 简单的嘛?
4 楼
san586
2010-01-28
十二郎的解决方案:hibernate支持视图,就是说你可以将你的几张表通过数据库建立3个视图,其中视图中可以有ID字段了。然后在项目中同对待表一样的进行查询。
3 楼
younglibin
2010-01-08
有 hibernate 高手吗?给个提示吧? 到底hibernate中有没有这样 用的,是不是这样就是 错的@!我在 hibernate 中见到 ,说mang-to-one 或 mang-to-mang中 说必须有id,是不是我这里的id 与 hibernate 内定义的id有冲突!刚刚 入门 程序研究 甚浅,希望老手 给个建议?让我把这个问题解决了吧!就算没有这种用法 ,说一声也可以,
敬 谢!
敬 谢!
2 楼
younglibin
2009-12-28
真的没有解决的办法吗?
我已经把项目 改了 , 不用一对多了 ,简单的一对一 ,项目逼人啊!
谁有 好的方法 写着啊,我把项目优化一下!
我已经把项目 改了 , 不用一对多了 ,简单的一对一 ,项目逼人啊!
谁有 好的方法 写着啊,我把项目优化一下!
1 楼
younglibin
2009-12-24
大侠们 ,有没有什么方式可以解决 啊!
发表评论
-
hibernate 没有id属性 怎么更新数据
2009-12-23 14:39 4051今天用hibernate 查了几个 ... -
Hibernate的各种保存方式的区别
2009-10-23 10:03 1024hibernate对于对象的保存提供了太多的方法,他们之间有很 ... -
hibernate继承映射
2009-09-05 11:13 1993A、采用subclass元素的继承映射: 采用这种方 ... -
hibernate映射文件one-to-many元素属性
2009-09-04 17:18 3591单向1——N关联关系的持久化类发生了改变,持久化类里需要使用集 ... -
hibernate映射集合属性
2009-09-02 15:43 1508hibernate映射集合属性通 ... -
hibernate中控制Insert 和 Update 语句的映射属性
2009-08-31 09:36 2957控制Insert 和 Update 语句的映射属性<pr ... -
hibernate映射文件many-to-many元素属性
2009-08-31 08:50 2909N-----N column(可选): 这个元素的外键关键字 ... -
hibernate映射文件property 元素属性
2009-08-31 08:49 3202property 元素 name:映射类属性的名字 ... -
hibernate映射文件many-to-one 元素属性
2009-08-31 08:48 3777many-to-one 元素 属性: name ... -
hibernate映射文件one-to-one 元素属性
2009-08-31 08:47 5833one-to-one 元素 属性: name:映射类 ... -
hibernate映射文件set 元素属性
2009-08-31 08:46 1931set 元素 属性: name:映射类属性的名字 ac ... -
hibernate映射文件id元素属性详解
2009-08-31 08:45 1514id 元素 属性: name: ... -
hibernate映射文件一级子元素详解
2009-08-31 08:44 1577子元素: meta:设置类或属性的元数据属性 subsel ... -
hibernate映射文件class元素属性详解
2009-08-31 08:42 1845class元素 属性: name:持久化类的全名 ta ... -
hibernate映射文件一级子元素属性详解
2009-08-31 08:42 860一级子元素: meta:用于设置类或属性的元数据属性 ty ... -
hibernate映射文件根元素属性详解
2009-08-31 08:40 1229根元素hibernate-mapping 属性: sche ...
相关推荐
在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据模型,它用于表示由多个属性共同构成的唯一标识。这种设计通常出现在实体类的某些属性组合起来才能唯一确定一个对象的情况下。本篇文章将...
这意味着这两个实体的表在数据库中通过主键进行连接,一个实体的主键同时也作为另一个实体的外键。 在Hibernate中,我们可以使用`@OneToOne`和`@PrimaryKeyJoinColumn`注解来实现这种关联。`@OneToOne`用于声明一对...
主键是表中的一列或一组列,其值是唯一的,用于唯一地标识表中的每一行数据。在Hibernate框架中,提供了多种主键生成策略,每种策略都有其适用场景。本文将详细介绍这些生成策略,并给出相应的应用场景分析。 #### ...
本文将深入探讨Hibernate ORM中的一个关键概念——多对多双向连接表关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生等例子,都需要用到多对多的关系来描述它们之间的复杂联系。 首先...
创建`hibernate.cfg.xml`配置文件,其中包含了数据库连接信息、方言设置(这里使用的是MySQLDialect)以及映射文件的位置。确保正确设置了`mapping resource`属性,指向我们的`User.hbm.xml`文件。 4. **生成数据...
通过以上步骤,我们就能在Hibernate中有效地管理多对多关联,并利用中间表实现复杂的数据操作。理解并熟练掌握这些知识,对于任何Java开发人员来说都是非常有价值的,特别是在大型企业级应用中,这种关联映射的使用...
总结来说,Hibernate简化了Java与数据库的交互,而连接池则优化了数据库连接的管理,二级缓存进一步提升了数据访问的效率。理解和熟练掌握这些技术,能够帮助开发者构建更高效、稳定的Java应用程序。
在数据库设计中,多对多关系通常表现为两个表之间的连接表,这个连接表包含了这两个表的主键,作为外键。例如,学生和课程的关系,一个学生可以选修多个课程,而一个课程也可以被多个学生选修,这就是典型的多对多...
**hibernate连接数据[Mysql]的代码实例** 在Java应用程序中,Hibernate是一个非常流行的ORM(Object-Relational Mapping)框架,它提供了强大的数据库操作能力,简化了Java与关系型数据库如MySQL之间的交互。本实例将...
6. **CRUD操作**:展示如何使用Hibernate进行创建(Create)、读取(Retrieve)、更新(Update)和删除/Delete)数据的示例代码,包括`save()`, `load()`, `update()`, `delete()`等方法的使用。 7. **HQL与Criteria查询**...
以下是对Hibernate主键类型及其配置的详细说明: 1. **uuid.hex**: 这种生成器使用128位算法生成一个32位的字符串。由于其通用性,它适用于所有类型的数据库。在`.hbm.xml`映射文件中,你可以这样配置: ```xml ...
其中,`hibernate.hbm2ddl.auto`属性是关键,它可以设置为`create`、`update`或`validate`,分别表示在启动时创建新表、更新现有表或验证表结构是否匹配。在本例中,我们使用`create-drop`,意味着每次应用启动时会...
本示例"用hibernate连接mycat",旨在展示如何在Java项目中结合这两个技术,利用Hibernate的ORM能力处理Mycat分片后的数据。以下将详细介绍这个过程,以及相关的配置和注意事项。 首先,我们需要在项目中集成Mycat。...
在数据库设计中,这种关系通过中间表(也称为关联表或连接表)来实现,它包含两个外键,分别引用原始表的主键。 在Hibernate中,处理多对多关系需要定义两个实体类,每个实体类对应一个表,并在其中一个或两个实体...
- **.hbm.xml文件**: Hibernate映射文件,描述了实体类与数据库表之间的映射关系,包括字段对应、主键生成策略、关联关系等。 4. **持久化操作** - **Session**: Hibernate的主要工作接口,负责执行CRUD操作...
通过Hibernate,我们可以将Java对象与数据库表进行映射,使得数据操作更加便捷和高效。 二、Hibernate环境搭建 1. 添加依赖:在Java项目中,你需要引入Hibernate的JAR包或通过Maven/Gradle等构建工具添加相关依赖。...
在生产环境中,通常使用`update`策略仅更新表结构。 6. **运行应用**:启动应用,Hibernate会根据实体类和配置自动创建相应的数据库表。 在提供的链接`https://purplesunset.iteye.com/blog/500979`中,可能详细...
3. **实体类与数据表映射**:在Hibernate中,我们定义一个Java类来表示数据库中的表,使用注解或XML映射文件将类与表关联。例如,`@Entity`注解标识一个类为实体,`@Table`注解指定对应数据库表名,`@Id`注解标记...
9. **hibernate.order_updates**:当设置为`true`时,Hibernate会按主键顺序执行更新操作,以减少死锁的可能性。 10. **hibernate.generate_statistics**:如果开启,Hibernate会收集统计信息以帮助优化性能。这些...
在实际应用中,Hibernate还提供了一些高级映射机制,如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)的关系映射。这些映射通过@OneToOne、@OneToMany、@ManyToOne和@...