Hibernate 的Map 用起来的确方便,但是对字段的命名,可能是 aj_key和aj_value,这样不好。
另外发现,hibernate3,不能根据map的key查value。不得不把Map都查出来,在内存里查找。
hql="select elements(p1.variablesEncode) from ProcessInstance p1 where p1.dbId = 145 and index(p1.variablesEncode)='"
+ AutojobConstants.$BusiPathHasErr$ + "'"
生成的mysql的sql:
select variablese3_.aj_mapvalue from aj_processinstance processins2_, aj_pi_variables variablese3_, aj_pi_variables variablese4_ where processins2_.aj_dbid=variablese3_.aj_pi_dbid and processins2_.aj_dbid=variablese4_.aj_pi_dbid and processins2_.aj_dbid=145 and variablese4_.aj_mapkey='$BusiPathHasErr$'
这里aj_pi_variables表出现两次,但彼此没有进行连接,查出的结果是错的。
另外发现,hibernate3,不能根据map的key查value。不得不把Map都查出来,在内存里查找。
hql="select elements(p1.variablesEncode) from ProcessInstance p1 where p1.dbId = 145 and index(p1.variablesEncode)='"
+ AutojobConstants.$BusiPathHasErr$ + "'"
生成的mysql的sql:
select variablese3_.aj_mapvalue from aj_processinstance processins2_, aj_pi_variables variablese3_, aj_pi_variables variablese4_ where processins2_.aj_dbid=variablese3_.aj_pi_dbid and processins2_.aj_dbid=variablese4_.aj_pi_dbid and processins2_.aj_dbid=145 and variablese4_.aj_mapkey='$BusiPathHasErr$'
这里aj_pi_variables表出现两次,但彼此没有进行连接,查出的结果是错的。
本文讨论了Hibernate使用Map类型的字段命名问题及查询限制。指出Hibernate3无法直接通过Map的Key查询Value,必须将整个Map加载到内存中再进行查找。并通过一个具体的SQL示例展示了这种查询方式可能导致的问题。
727

被折叠的 条评论
为什么被折叠?



