1

通过 Liferay Service Builder 在 service.xml 中生成实体时,通常会创建类似于以下片段的查找器列:

   <entity name="Person" local-service="true" >
        <column name="personId" type="long" primary="true" />
        <column name="firstName" type="String" />
        <column name="lastName" type="String" />
        <finder name="AnyName" return-type="Collection" >
            <finder-column name="firstName" />
            <finder-column name="lastName" />
        </finder>
   <entity>

这将创建一个查找器方法,该方法可以找到同时匹配firstNamelastName的实体。

如何创建一个可以选择匹配任何列的查找器。我需要生成类似于 SQL 的东西:SELECT from person where firstName = "firstname" OR lastName = "lastname"。

这可能吗?

4

1 回答 1

0

您可能希望使用 DynamicQuery 来使用“OR”语句。然后我能想到的另一种方法是

将此添加到 service.xml

    <finder name="FirstName" return-type="Collection" >
        <finder-column name="firstName" />
    </finder>

    <finder name="LastName" return-type="Collection" >
        <finder-column name="lastName" />
    </finder>

这给你 PersonLocalServiceImpl

    public List < Person > getPersonByAnyName(String firstName, String lastName) {
        if (firstName != null && (lastName == null || lastName.equals("") )) {
            return getPersonByFirstName(firstName);
        }
        if (lastName != null && (firstName == null || firstName.equals("") )) {
            return getPersonByLastName(lastName);
        }

        return personPeristence.findByAnyName(firstName, lastName);

    }


    public List < Person > getPersonByFirstName(String firstName) {
        // return the Collection from personPersistence.findByFirstName ...
    }

    public List < Person > getPersonByLastName(String lastName) {
        // return the Collection from personPersistence.findByLastName ...
    }

编辑:哎呀,此代码不能用作 OR 语句,如果您打算将 Sting 参数之一用作 null

于 2013-05-13T05:22:02.223 回答