2015-07-16 2 views
1

У меня есть следующий service.xml:Liferay обновление службы

<!-- PK fields --> 
    <column name="id" type="long" primary="true"/> 

    <!-- Group instance --> 

    <!-- <column name="groupId" type="long" /> --> 

    <!-- Certificate fields --> 

    <column name="version" type="int" /> 
    <column name="subject" type="String" /> 
    <column name="serial" type="String" /> 
    <column name="encoded" type="Blob" /> 
    <column name="to_auth" type="boolean" /> 
    <column name="to_sign" type="boolean" /> 
    <column name="ins_date" type="Date" /> 
    <column name="alt_date" type="Date" /> 
    <column name="requests" type="Collection" entity="APPLET_REQUEST"/> 
    <column name="user_certifcates" type="Collection" entity="USER_CERTIFICATE"/> 
    <!-- Order --> 

    <order by="asc"> 
     <order-column name="id" /> 
    </order> 

    <!-- Finder methods: TODO: gets dos campos que pretendo --> 

    <finder name="id" return-type="Collection"> 
     <finder-column name="id" /> 
    </finder> 
</entity> 

<!-- PK fields --> 
    <column name="userid" type="long" primary="true"/> 
    <column name="companyid" type="long" primary="true"/> 
    <column name="certificateid" type="long" primary="true"/> 

    <!-- Group instance --> 

    <!-- <column name="groupId" type="long" /> --> 

    <!-- User_Certificate fields --> 

    <!-- Order --> 

    <order by="asc"> 
     <order-column name="userid" /> 
    </order> 

    <finder name="userid" return-type="Collection"> 
     <finder-column name="userid" /> 
    </finder> 
</entity> 

Я развернутую службу с первым объектом и никаких проблем не появилось. Когда я вставляю второй объект и сделал развернуть службы, Liferay показал следующее сообщение об ошибке:

Caused by: com.liferay.portal.kernel.upgrade.UpgradeException: Upgrade code using unsupported class type 2004 

Как я могу решить эту проблему?

ответ

2

Принято, сообщение об ошибке Liferay - хорошо - не очень полезно. Я подал LPS-57190, чтобы изменить это в будущем. Соответствующие изменения кода уже упоминаются в билете. На данный момент, если вы посмотрите на код, который я затронул для этой проблемы, вы увидите, что в 2004 году SQL-тип одного из столбцов, который ServiceBuilder пытается обновить. Это число из java.sql.Types. Проверяя этот класс, это BLOB - поэтому кажется, что у SB возникают проблемы с обновлением столбца BLOB.

Вы можете (и должны) написать свой собственный код обновления, чтобы явно заботиться о том, что Liferay не может сделать сам. Сам Liferay поставляется с довольно большим количеством UpgradeAction s, который изменит базу данных при установке новой версии. Стандартная операция обновления таблицы (например, описанная in this thread) не всегда то, что вы хотите.

Вот как предотвратить Liferay от automatically upgrading your tables - найдите UpgradeAction и дайте Liferay знать, что вы сами обновили новую структуру таблицы.

+0

благодарит за ответ! – tech4