2017-08-21 67 views
1

我试图将com.chqmas.user.User pojo类映射到USR table.and USR_PWD_HISTORY表。如何将单个POJO类映射到多个表

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping> 
    <class name="com.chqmas.user.User" table="USR" batch-size="50"> 
     <id name="name" column="NAME"/> 
     <property name="bankBranch" column="BANK_BRANCH"/> 
     <property name="realName" column="REAL_NAME"/> 
     <property name="pwd" column="PWD"/> 
     <property name="pwdenc" column="PWD_ENC"/> 
     <property name="level" column="LEVEL"/> 
     <property name="url" column="URL"/> 
     <property name="status" column="STATUS"/> 
     <property name="lastSignOnDate" column="LAST_SIGN_ON_DATE"/> 
     <property name="passWdChangedDate" column="PASS_WD_CHANGE_DATE"/> 
    </class> 

    <class name="com.chqmas.user.User" table="USR_PWD_HISTORY" batch-size="50"> 
     <id name="name" column="NAME"/> 
     <property name="pwd" column="PWD"/> 
     <property name="pwdenc" column="PWD_ENC"/> 
     <property name="passWdChangedDate" column="PASS_WD_CHANGE_DATE"/> 
    </class> 
</hibernate-mapping> 

但我得到这个错误..

enter image description here

我怎么能这个POJO类映射到这两个表。

谢谢。

+0

不可能。建议重新设计Java类 - 顺便说一句,我猜他们是1:N关系? –

+1

两张桌子之间的关系是什么? – MartinByers

+0

两个表之间没有关系。 –

回答

1

USR和USR_PWD_HISTORY表示两个不同的逻辑实体,那么为什么不把密码历史列表保存在用户对象内呢?

+0

你是什么意思用户对象? –

+0

用户类的一个实例[see] (https://stackoverflow.com/a/1486212/4725465) – mzalcmanis

0

这是可能的,虽然我会再次强烈建议这种方法,因为我不相信这将是一个数据的准确表示。

您可以使用HBM中的连接元素。

<class name="com.chqmas.user.User" table="USR" ...> 
    <id name="name" column="NAME"/> 
    <!-- mappings for other columns from USR table --> 

    <join table="USR_PWD_HISTORY"> 
     <!-- 
      key defines the pk column of that joined table which is assumed 
      to also be the foreign-key source column referring back to 
      USR 
     --> 
     <key column="name"/> 

     <!-- mappings for other columns from USR_PWD_HISTORY table --> 
    </join> 
</class> 

不过,我不会推荐这对于一个1一对多或多对多一对多的关系,其中第二POJO和一个袋子会更合适。

此外,列名将暗示存储纯文本密码,这是安全风险,并且是“不良做法”。