Hibernate使用Criteria对复合主键的处理、查询
Published by admin on 01月 18, 2008
Hibernate复合主键,如果把一个表分成俩部分,一部分是<key-property>,一部分是<property>时,一般的处理相信大家都知道.但如果通过criteria对复合主键进行处理,那么会出现个问题.criteria.add(Expression.eq(”字段映射名”,值)),这个地方的字段映射名应该怎么写?网上有资料说通过别名来操作到是个不错的方法,但下面是讨论通过直接把表的字段都影射成为复合主健,只映射为一个类进行直接处理;
<class name=”com.hostel.db.entity.log.LogId” table=”LOG” schema=”TEGUAN”>
<composite-id>
<key-property name=”logId” type=”java.lang.String”>
<column name=”LOG_ID” length=”10″ />
</key-property>
<key-property name=”logData” type=”java.lang.String”>
<column name=”LOG_DATA” length=”30″ />
</key-property>
<key-property name=”logType” type=”java.lang.String”>
<column name=”LOG_TYPE” length=”2″ />
</key-property>
<key-property name=”logContent” type=”java.lang.String”>
<column name=”LOG_CONTENT” length=”1000″ />
</key-property>
<key-property name=”logUser” type=”java.lang.String”>
<column name=”LOG_USER” length=”30″ />
</key-property>
<key-property name=”logIp” type=”java.lang.String”>
<column name=”LOG_IP” length=”16″ />
</key-property>
</composite-id>
</class>
通过这样,只需要操作一个类来完成。这样对于使用criteria来查询查询是个不错的选择;
使用Criteria查询不能通过主健进行查询(兴许是笔者自己太弱了),这时就首先需要把主健字段屏蔽掉。如下代码:
criteria.add(Example.create(hostel)
.enableLike(MatchMode.ANYWHERE) //模糊查询
.excludeProperty(”registerdate”) //取消按照注册时间、审核时间、旅馆ID 进行示例查询
.excludeProperty(”auditdate”)
.excludeProperty(”gasthausId”));
这样就可以屏蔽掉按某些字段查询,然后在通过criteria.add(Expression.eq(”",”"))来进行查询了;
注:如果查询字段没有通过.excludeProperty屏蔽示例查询,那么 .enableLike(MatchMode.ANYWHERE) //模糊查询 将会自动进行模糊查询,而不用使用Expression.like(”字段名”,”%”+值+”%”);

Add A Comment