2013-05-08 78 views
0

當生成通過Liferay的服務構建您的service.xml的實體,這是司空見慣的創建取景列類似下面的代碼片段:Liferay的服務構建:創建發現者那場比賽至少有一列

<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> 

這創建一個查找方法,可以找到與名字姓氏相匹配的實體。

如何創建與任意列匹配的查找程序。我需要生成類似於以下內容的SQL:從firstName =「firstname」 lastName =「lastname」的人員進行SELECT。

這可能嗎?

+0

直接通過finder方法,它似乎不可能。你可以在這裏使用DynamicQuery。 – 2013-05-09 06:56:16

回答

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參數爲空

+0

我認爲DynamicQuery涵蓋了它 – Olaseni 2013-05-13 07:19:19

相關問題