相关疑难解决方法(0)

Hibernate查询:Set是否包含某个Object?

我有两个Hibernate数据对象.第一个是User(具有唯一ID,用户名等),第二个是Collaborateable类.在这两者之间存在n与m的关系(与Sets实现).这意味着,用户可以在许多Collaborateable上工作,而Collaborateable有很多用户.此外,Collaborateable只有一个用户作为所有者.

<class name="CollaborateableImpl" table="Collaborateable">
<id name="id" type="int" column="id">
    <generator class="increment" />
</id>

<property name="name" column="name" type="string" not-null="true" />
<property name="keywords" column="keywords" type="string"/>

<!-- Collaborateable has a Registered User as owner -->
<many-to-one name="owner" class="UserImpl" fetch="select">
        <column name="User_id_owner" not-null="true" />
</many-to-one>

<!-- Users that collaborate on this Collaborateable -->
<set name="users" table="CollaborateOn" inverse="false">        
        <key column="Collaborateable_id" />         
        <many-to-many column="User_id" class="UserImpl" />    
</set>
Run Code Online (Sandbox Code Playgroud)

我想实现一个Hibernate查询,该查询搜索具有某个用户作为所有者的Collaborateable,或者在Collaborateable.users集中包含相同的特定用户.此外,还应该有一个简单的WHERE子句来检查关键字.

在Hibernate中有类似CONTAINS运算符的东西吗?

例如:

FROM CollaborateableImpl WHERE (owner = :user OR users CONTAINS :user) AND keywords like '%:searchString%'
Run Code Online (Sandbox Code Playgroud)

否则,你知道如何用连接来解决这个问题吗?

hibernate hql contains set

17
推荐指数
1
解决办法
2万
查看次数

如何在形成HQL查询时解决由于递归引起的java.lang.StackOverflowError

每当循环中的迭代变得更高时,我就会得到StackOverflowError.我写这样的逻辑:

public List<Vehicle> seacrhCar(Integer from, SearchDto searchDto,List<String> coveredZipcodes) {
    String q = "from Vehicle where 1=1";
    int i=1;

    if(StringUtils.isNotBlank(searchDto.getFromYear()))
        q+=" and year>='"+StringUtils.replace(searchDto.getFromYear().trim(), "'", "''")+"'";

    if(StringUtils.isNotBlank(searchDto.getToYear()))
        q+=" and year<='"+StringUtils.replace(searchDto.getToYear().trim(), "'", "''")+"'";

    if(StringUtils.isNotBlank(searchDto.getManufacturer()))
        q+=" and make='"+StringUtils.replace(searchDto.getManufacturer().trim(), "'", "''")+"'";

    if(StringUtils.isNotBlank(searchDto.getCarModel()))
        q+=" and model='"+StringUtils.replace(searchDto.getCarModel(), "'", "''")+"'";

    if(StringUtils.isNotBlank(searchDto.getTrim()))
        q+=" and trim='"+StringUtils.replace(searchDto.getTrim().trim(), "'", "''")+"'";

    if(StringUtils.isNotBlank(searchDto.getMinPrice()))
        q+=" and priceBaseMsrp>="+searchDto.getMinPrice().trim();

    if(StringUtils.isNotBlank(searchDto.getMaxPrice()))
        q+=" and priceBaseMsrp<="+searchDto.getMaxPrice().trim();

    if(coveredZipcodes.size()>0) {
        q+=" and (";
        for(String zip : coveredZipcodes) {
            q+="zipcode LIKE '%"+zip+"'";
            q+=(i==coveredZipcodes.size())?")":" or ";
            i++;
        }
    }
    q+=" group by vehicle";


    List<Vehicle> …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate

5
推荐指数
1
解决办法
4313
查看次数

标签 统计

hibernate ×2

contains ×1

hql ×1

java ×1

set ×1

spring ×1