</pre>通过hibernate 自动生成的视图 是2个类,<p></p><p>1.第一步 首先把2个类整合成一个pojo类 ,</p><p>Test .java Test_Id.java 整合成一个poji类</p><p></p><p>Hibernate 查询视图 出现 如果一条记录中有空值则查不出来的问题是因为使用了联合主键的方式设置的视图,就相当于一条记录是一个主键,如果一个为空就查不出来</p><p>2.因hibernate自动生成的视图没有主键,故将所有字段变成一个联合主键,这样字段中有一个为空,则list为空</p><p>原xml:</p><p></p><pre name="code" class="html"><composite-id>
<key-property name="id" type="java.lang.Integer">
<column name="id" />
</key-property>
<key-property name="kehu" type="java.lang.String">
<column name="kehu" />
</key-property>
<key-property name="goodsset" type="java.lang.String">
<column name="goodsset" />
</key-property>
</composite-id>
唯一的方法就是绑定一个主键 例如:绑定id,其他的不绑定
<composite-id>
<key-property name="id" type="java.lang.Integer">
<column name="id" />
</key-property>
</composite-id>
<property name="kehu" type="java.lang.String">
<column name="kehu" />
</property>
<property name="goodsset" type="java.lang.String">
<column name="goodsset" />
</property>
这样,如果id不为空则查出来的记录就不为空! 记得以后创建视图的时候绑定一个不为空的字段!!!
修正一下,上面绑定的<composite-id> 里面的id字段的值必须是唯一的不能相同,不然查出来的所有List的值都一样,这是因为hibernate缓存机制的原因,如果下一个记录的主键和上一个一样,那么hibernate就会调用缓存中的list值。
对于 有 group by 等分组的特殊情况的视图, 我们可以用id的MAX(),MIN(),函数来确定唯一性!