HIbernate工具逆向工程在一个独特的列上创建了一个集合

时间:2014-07-04 11:56:37

标签: java hibernate reverse-engineering hibernate-tools

有一个表A和一个表B,A有一个fk到B. 在A中,此FK的列是唯一且可空的。这意味着,B仅作为一个A的最大值被引用。

但是hibernate工具反向引擎生成pojos:

Pojo A带有字段B.好的,这是正确的。 带有一组A的Pobo B.不,它不是,应该是单个字段A.

怎么了?我错过了什么?

这是我的reveng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering SYSTEM "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" >

<hibernate-reverse-engineering>

<type-mapping>
    <sql-type jdbc-type="BIGINT" hibernate-type="java.math.BigInteger" />
    <sql-type jdbc-type="NUMERIC" precision="19" hibernate-type="java.math.BigInteger"/>
    <sql-type jdbc-type="NUMERIC" precision="10" not-null="true" hibernate-type="int"/>
    <sql-type jdbc-type="NUMERIC" precision="10" not-null="false" hibernate-type="java.lang.Integer"/>
    <sql-type jdbc-type="NUMERIC" precision="4" not-null="true" hibernate-type="byte"/>
    <sql-type jdbc-type="NUMERIC" precision="4" not-null="false" hibernate-type="java.lang.Byte"/>
    <sql-type jdbc-type="OTHER" hibernate-type="timestamp"/>
</type-mapping>

<table-filter match-name="MLOG.*"  exclude="true" /> 
<table-filter match-name="RUPD.*"  exclude="true" />  

<!-- Forzamos a que el id sea Integer. Al eliminar el autoincremental hibernate pasa este campo a int.-->
<!-- Se cambia el codigo para que no afecte el tipo-->
<!--
<table name="cpanel_bloque_canal" catalog="ob_cpanel"> 
    <primary-key>                       
        <key-column name="idBloque" type="java.lang.Integer"/>
    </primary-key>
</table>
-->

1 个答案:

答案 0 :(得分:-1)

映射是正确的,因为在这种情况下,来自表B的一条记录来自表A中的几条记录。

实施例

  • 表A数据:
  • ID ID_FROM_B
  • 1 1
  • 2 1
  • 3 2

  • 表B数据:

  • ID
  • 1
  • 2

如果您从表B获取记录并加入A记录,您将获得结果:

对于B ID 1:ID(表A)1; ID(TableA)2 - 这必须放入一个集合中,这就是为什么你得到这样的pojo结构。