没有自主主键的表间关联关系如何处理

问题描述

我有两张表,一张:用户基本信息表一张:用户详细信息表表间是一对多的关系(one-to-many关系),即一个用户基本信息表可以对应到多个详细信息,那么在这种情况下,用hibernate反转工程如何进行处理。生成的表结构总是不对。--------------------------------------------------用户基本信息表createtablecustomerInfo(customerIdintidentityprimarykey,customerNamevarchar(20)notnull,passwordvarchar(20)notnull,emailvarchar(30)notnull,cashmoneydefault(0))goaltertablecustomerInfoaddconstraintCK_cashcheck(cash>=0)gocreatetablecustomerDetailInfo(customerIdintnotnull,customerNamevarchar(20)notnull,telvarchar(13)notnull,emailvarchar(30),addressvarchar(80)notnull,countMoneyfloat,qqvarchar(12))altertablecustomerDetailInfoaddconstraintFK_customerIdforeignkey(customerId)referencescustomerInfo(customerId)go

反转工程会自动生成三个POJO类,但是对应的只有两个.hbm.xml文件;CustomerInfo.javaPOJO类如下:publicclassCustomerInfoimplementsjava.io.Serializable{privateIntegercustomerId;privateStringcustomerName;privateStringpassword;privateStringemail;privateDoublecash;privateSetorderMains=newHashSet(0);privateSetcustomerDetailInfos=newHashSet(0);publicCustomerInfo(){}publicCustomerInfo(StringcustomerName,Stringpassword,Stringemail){this.customerName=customerName;this.password=password;this.email=email;}publicCustomerInfo(StringcustomerName,Stringpassword,Stringemail,Doublecash,SetorderMains,SetcustomerDetailInfos){this.customerName=customerName;this.password=password;this.email=email;this.cash=cash;this.orderMains=orderMains;this.customerDetailInfos=customerDetailInfos;}/**省略getset方法*/}

对应的CustomerInfo.hbm.xml文件<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--MappingfileautogeneratedbyMyEclipsePersistenceTools--><hibernate-mapping><classname="com.snail.dao.pojo.CustomerInfo"table="customerInfo"schema="dbo"catalog="bookStore"><idname="customerId"type="java.lang.Integer"><columnname="customerId"/><generatorclass="native"></generator></id><propertyname="customerName"type="java.lang.String"><columnname="customerName"length="20"not-null="true"/></property><propertyname="password"type="java.lang.String"><columnname="password"length="20"not-null="true"/></property><propertyname="email"type="java.lang.String"><columnname="email"length="30"not-null="true"/></property><propertyname="cash"type="java.lang.Double"><columnname="cash"scale="4"/></property><setname="orderMains"inverse="true"><key><columnname="customerId"not-null="true"/></key><one-to-manyclass="com.snail.dao.pojo.OrderMain"/></set><setname="customerDetailInfos"inverse="true"><key><columnname="customerId"not-null="true"/></key><one-to-manyclass="com.snail.dao.pojo.CustomerDetailInfo"/></set></class></hibernate-mapping>

生成的CustomerDetailInfo.javaPOJO类如下:publicclassCustomerDetailInfoimplementsjava.io.Serializable{privateCustomerDetailInfoIdid;privateCustomerInfocustomerInfo;publicCustomerDetailInfo(){}publicCustomerDetailInfo(CustomerDetailInfoIdid,CustomerInfocustomerInfo){this.id=id;this.customerInfo=customerInfo;}publicCustomerDetailInfoIdgetId(){returnthis.id;}//省略setget方法}

对应的配置文件如下<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--MappingfileautogeneratedbyMyEclipsePersistenceTools--><hibernate-mapping><classname="com.snail.dao.pojo.CustomerDetailInfo"table="customerDetailInfo"schema="dbo"catalog="bookStore"><composite-idname="id"class="com.snail.dao.pojo.CustomerDetailInfoId"><key-propertyname="customerId"type="java.lang.Integer"><columnname="customerId"/></key-property><key-propertyname="customerName"type="java.lang.String"><columnname="customerName"length="20"/></key-property><key-propertyname="tel"type="java.lang.String"><columnname="tel"length="13"/></key-property><key-propertyname="email"type="java.lang.String"><columnname="email"length="30"/></key-property><key-propertyname="address"type="java.lang.String"><columnname="address"length="80"/></key-property><key-propertyname="countMoney"type="java.lang.Double"><columnname="countMoney"precision="53"scale="0"/></key-property><key-propertyname="qq"type="java.lang.String"><columnname="qq"length="12"/></key-property></composite-id><many-to-onename="customerInfo"class="com.snail.dao.pojo.CustomerInfo"update="false"insert="false"fetch="select"><columnname="customerId"not-null="true"/></many-to-one></class></hibernate-mapping>

生成的CustomerDetailInfoId如下:publicclassCustomerDetailInfoIdimplementsjava.io.Serializable{privateIntegercustomerId;privateStringcustomerName;privateStringtel;privateStringemail;privateStringaddress;privateDoublecountMoney;privateStringqq;publicCustomerDetailInfoId(){}publicCustomerDetailInfoId(IntegercustomerId,StringcustomerName,Stringtel,Stringaddress){this.customerId=customerId;this.customerName=customerName;this.tel=tel;this.address=address;}publicCustomerDetailInfoId(IntegercustomerId,StringcustomerName,Stringtel,Stringemail,Stringaddress,DoublecountMoney,Stringqq){this.customerId=customerId;this.customerName=customerName;this.tel=tel;this.email=email;this.address=address;this.countMoney=countMoney;this.qq=qq;}}

解决方案

解决方案二:
无所谓主键索引新建好就行了
解决方案三:
LZ,如果用反向,建议LZ还是只生成对应自己的实体属性字段。对应的表与表之间的关联关系,还是自己去配吧

时间: 2024-10-21 21:37:53

没有自主主键的表间关联关系如何处理的相关文章

oracle-表A以某几个主键参照表B,A.日期 比B.日期最大值大,没有的情况下比最小值小

问题描述 表A以某几个主键参照表B,A.日期 比B.日期最大值大,没有的情况下比最小值小 表A以某几个主键参照表B,A.日期 比B.日期最大值大,没有的情况下比最小值小 解决方案 不太理解没有什么的情况下? 表A以某几个主键参照表B,A.日期 比B.日期最大值大 这个用子查询 select * from a where a.日期 > (select max(日期) from b) 解决方案二: 子查询 select * from a where a.日期 > (select max(日期) f

表B的主键是表A的外键,用hibernate怎么生成相应的实体类和映射文件呢?

问题描述 有两张表A,B,表B的主键是表A的外键,用hibernate怎么生成相应的实体类和映射文件呢? 解决方案 解决方案二: 解决方案三:搜下hibernate@OneToMany或者@ManyToOne用注释比较方便解决方案四:引用2楼u012895467的回复: 搜下hibernate@OneToMany或者@ManyToOne用注释比较方便 在实体类A中有个表示表中主键成员变量deelid,在实体类B中有个privateAa;在表B中的主键字段是deelid,且是表A中字段deelid

MSSQL如何在没有主键的表中删除重复数据

原文:MSSQL如何在没有主键的表中删除重复数据 为了对重复数据进行实验,下面建一个设计不太好(没有主键)表并插入了一些重复数据: create database testdb use testdb ; go create table DupsNoPK (Col1 int Null, Col2 char(5) Null ); go insert DupsNoPK(Col1,Col2) Values(1,'abc'), (2,'abc'), (2,'abc'), (2,'abc'), (7,'xy

删除没有主键的表中的重复记录

删除没有主键的表中的重复记录 create procedure delrepeat as begin SELECT distinct *  INTO testTemp FROM test delete from test insert into test SELECT *  FROM testTemp drop table testTemp end distinct:用于查询中去除重复项 begin~end范围语句表示存储过程中作为整体执行的语句块 oracle数据库教程 delete from

PostgreSQL数据库中没有主键的表增加主键

PostgreSQL数据库测试环境中有多张表没有添加主键约束,只有一个serial的自增字段.现在需要把那些没有主键的表都加上,serial类型的字段为id . 首先是怎么找到PostgreSQL数据库中哪些表没有主键?我们看下pg_class这个表,里面有个relhaspkey字段,如果为t说明有主键,f即没有主键.例如下面这个sql . SELECT n.nspname AS "Schema",c.relname AS "Table Name",c.relhas

java语言 play framework插入Mysql数据主键名不为id 如何处理?

问题描述 java语言 play framework插入Mysql数据主键名不为id 如何处理? java语言 play framework插入Mysql数据主键名不为id 如何处理?因为这个框架对数据库主键有要求,主键名必须叫 id,否者不能做添加数据的操作.求大神帮忙 解决方案 求大神啊啊啊 自己先顶一下 解决方案二: 你用orm是什么啊?你说的不够清楚

Oracle 创建自动增加主键的表

create table t (pk number primary key,name varchar2(20)); create sequence t_seq ;create trigger t_trigger before insert on t for each rowbeginselect seq.nextval into :new.pk from dual;  end;/ 测试:select * from t;        未选定行         SQL> insert into t

hibernate 双主键表反向工程问题

问题描述 hibernate 双主键表反向工程问题 hibernate下双主键的表生成DAO和相关映像文件时如何把两个主键提取到一个类中,有没有能自动生成的,还是要自己写呀? 解决方案 http://blog.csdn.net/fycheung/article/details/7674185

java-问题 如何用Java程序实现,父表的主键插入到子表的外键中?

问题描述 问题 如何用Java程序实现,父表的主键插入到子表的外键中? 需求从excel导入数据到mysql数据库,然后父表的主键是自增列,插入数据同时把主键插入子表的外键中(我已经把主表的数据插入了)