问题描述
/*==============================================================*//* DBMS name: MySQL 5.0 *//* Created on: 2011-11-3 19:37:33 *//*==============================================================*/drop database if exists db_hi;create database db_hi;use db_hi;/*==============================================================*//* Table: tb_bbs *//*==============================================================*/drop table if exists tb_bbs;create table tb_bbs( bbs_id int(4) not null auto_increment, bbs_boardid smallint(2), bbs_title varchar(70), bbs_content varchar(2000), bbs_sender varchar(20), bbs_sendtime datetime, bbs_face varchar(8), bbs_optime datetime, bbs_istop varchar(1), bbs_totoptime datetime, bbs_isgood varchar(1), bbs_togoodtime datetime, primary key (bbs_id));/*==============================================================*//* Index: index_1 *//*==============================================================*/create index index_1 on tb_bbs( bbs_sender);/*==============================================================*//* Table: tb_user *//*==============================================================*/drop table if exists tb_user;create table tb_user( id int(4) not null auto_increment, user_password varchar(15), user_name varchar(20), user_face varchar(8), user_sex varchar(2), user_phone varchar(15), user_qicq varchar(20), user_email varchar(20), user_from varchar(20), user_able varchar(4), primary key (id), unique key ak_key_2 (user_name));/*==============================================================*//* Index: un_username *//*==============================================================*/create unique index un_username on tb_user( user_name);alter table tb_bbs add constraint fk_reference_1 foreign key (bbs_sender) references tb_user (user_name) on delete cascade on update cascade;以上是mysql 的脚本然后使用hibernate处理 hibernate中配置文件BbsForm对应的xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping> <class name="com.liuyi.form.BbsForm" table="tb_bbs" catalog="db_bbs"> <id name="bbsId" type="java.lang.Integer"> <column name="BBS_ID" /> <generator class="increment"></generator> </id> <many-to-one name="tbBoard" class="com.liuyi.form.BoardForm" fetch="select"> <column name="BBS_BOARDID" /> </many-to-one> <many-to-one name="tbUser" class="com.liuyi.form.UserForm" fetch="select"> <column name="BBS_SENDER" length="20" /> </many-to-one> <property name="bbsTitle" type="java.lang.String"> <column name="BBS_TITLE" length="70" /> </property> <property name="bbsContent" type="java.lang.String"> <column name="BBS_CONTENT" length="2000" /> </property> <property name="bbsSendtime" type="java.util.Date"> <column name="BBS_SENDTIME" length="0" /> </property> <property name="bbsFace" type="java.lang.String"> <column name="BBS_FACE" length="40" /> </property> <property name="bbsOptime" type="java.util.Date"> <column name="BBS_OPTIME" length="0" /> </property> <property name="bbsIstop" type="java.lang.String"> <column name="BBS_ISTOP" length="1" /> </property> <property name="bbsTotoptime" type="java.util.Date"> <column name="BBS_TOTOPTIME" length="0" /> </property> <property name="bbsIsgood" type="java.lang.String"> <column name="BBS_ISGOOD" length="1" /> </property> <property name="bbsTogoodtime" type="java.util.Date"> <column name="BBS_TOGOODTIME" length="0" /> </property> <set name="tbBbsanswers" inverse="true"> <key> <column name="BBSANSWER_ROOTID" /> </key> <one-to-many class="com.liuyi.form.BbsAnswerForm" /> </set> </class></hibernate-mapping>UserForm对应的xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping> <class name="com.liuyi.form.UserForm" table="tb_user" catalog="db_bbs"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="increment"></generator> </id> <property name="userName" type="java.lang.String"> <column name="USER_NAME" length="20" unique="true" /> </property> <property name="userPassword" type="java.lang.String"> <column name="USER_PASSWORD" length="15" /> </property> <property name="userFace" type="java.lang.String"> <column name="USER_FACE" length="40" /> </property> <property name="userSex" type="java.lang.String"> <column name="USER_SEX" length="2" /> </property> <property name="userPhone" type="java.lang.String"> <column name="USER_PHONE" length="15" /> </property> <property name="userOicq" type="java.lang.String"> <column name="USER_OICQ" length="20" /> </property> <property name="userEmail" type="java.lang.String"> <column name="USER_EMAIL" length="20" /> </property> <property name="userFrom" type="java.lang.String"> <column name="USER_FROM" length="20" /> </property> <property name="userAble" type="java.lang.String"> <column name="USER_ABLE" length="4" /> </property> <set name="tbBbses" inverse="true"> <key> <column name="BBS_SENDER" length="20" /> </key> <one-to-many class="com.liuyi.form.BbsForm" /> </set> </class></hibernate-mapping>如果在数据库操作层使用Session session=SessFactory.newInstance().openSession(); BbsForm bbsForm=(BbsForm) session.get(BbsForm.class, id);java.sql.sqlexception Invalid value for getInt() "xxxx"虽然知道hibernate内部一定是以user表中的id作为主键,但mysql既然支持这种不正确的主键关系,为什么hibernate就不能支持这种不通过只能使用id来标识对象,不知道大牛们对这种有什么看法
解决方案
hibernate+不合范式的DB绝对是折腾,虽然hiberante支持~~~~ <many-to-one name="tbUser" class="com.liuyi.form.UserForm" fetch="select" property-ref="userName">