掲示板

Service Builder Secuencias

thumbnail
11年前 に Fernando Rubio Sancho によって更新されました。

Service Builder Secuencias

New Member 投稿: 10 参加年月日: 12/09/16 最新の投稿
Hola,

Estoy trabajando con Liferay CE 6.0.6 y el plugin SDK 6.0.6, para el acceso a datos he probado inicialmente mediante Hibernate y DAO y funciona correctamente, pero al intentar hacerlo funcionar con Service Builder me funciona todo excepto el tema de la secuencia que parece no funcionar, dándome un error de BeanLocator Not Set. He estado búscando por los foros de Liferay y aquí http://issues.liferay.com/browse/LPS-26031 parece indicar que este tema se resuelve en la versión 6.10. El problema es que tengo que trabajar por cuestiones de requisitos con la versión 6.0.6.

Con hibernate me funciona correctamente con el siguiente fichero de hibernate:

hibernate-mapping>
<class name="model.catalogos.CMunicipio" table="c_municipio" schema="carreteras_gu">
<id name="idMun" type="int">
<column name="id_mun" />
<generator class="sequence" >
<param name="sequence">carreteras_gu.c_municipio_seq</param>
</generator>
</id>
</class>
</hibernate-mapping>

Pero con Service Builder teniendo el fichero service.xml de la siguiente manera:

<service-builder package-path="carreterasportlet">
<author>frubio</author>
<namespace>carreterasportlet</namespace>
<entity name="c_municipio" table="c_municipio" local-service="true" remote-service="false"
data-source="carreterasDataSource" session-factory="carreterasSessionFactory" tx-manager="carreterasTransactionManager">
<column name="id_mun" type="int" primary="true" id-type="sequence" id-param="carreteras_gu.c_municipio_seq" />
<column name="nombre" type="String"/>
</entity>
</service-builder>

Genera el siguiente portlet-hbm.xml:

<hibernate-mapping default-lazy="false" auto-import="false">
<import class="model.c_municipio" />
<class name="model.impl.c_municipioImpl" table="c_municipio" schema="carreteras_gu">
<cache usage="read-write" />
<generator class="sequence" >
<param name="sequence">carreteras_gu.c_municipio_seq</param>
</generator>
</id>
</class>
</hibernate-mapping>

El parámetro schema="carreteras_gu" lo pongo manualmente para que funcione correctamente. El tema es que siguiendo las instrucciones que vienen en el DTD de la versión Liferay 6.0.6 aquí-> http://docs.liferay.com/portal/6.0/definitions/liferay-service-builder_6_0_0.dtd.org.html No funciona.
thumbnail
11年前 に Fernando Rubio Sancho によって更新されました。

RE: Service Builder Secuencias

New Member 投稿: 10 参加年月日: 12/09/16 最新の投稿
Para solucionarlo lo que he hecho es no utilizar secuencia y dejarlo como assigned en el service.xml:

<id name="idMun" type="int">
<column name="id_mun" />
<generator class="assigned" />
</id>

y posteriormente utilizar lo siguiente:

c_municipio municipio = new c_municipioPersistenceImpl().create((int)CounterLocalServiceUtil.increment(c_municipio.class.getName()));
municipio.setNombre(nombre);
municipio.setSys_user_alta(login);
c_municipioLocalServiceUtil.addc_municipio(municipio);

Y así, sí que funciona, pero claro no está utilizando la secuencia que es lo que yo quisiera.
thumbnail
11年前 に Fernando Rubio Sancho によって更新されました。

RE: Service Builder Secuencias

New Member 投稿: 10 参加年月日: 12/09/16 最新の投稿
La cuestión es, si voy a tener problemas con el ServiceBuilder en esta versión... ¿No me convendría más utilizar Hibernate por mi cuenta y olvidarme del ServiceBuilder al menos para esta versión?
thumbnail
11年前 に Fernando Rubio Sancho によって更新されました。

RE: Service Builder Secuencias

New Member 投稿: 10 参加年月日: 12/09/16 最新の投稿
Al final lo que he hecho es utilizar en la base de datos un disparador para que actualice el id del municipio mediante la secuencia, en este caso en PostgreSQL:

begin
IF (TG_OP = 'INSERT' ) THEN
NEW.sys_fecha_alta=current_timestamp;
NEW.id_mun=nextval('carreteras_gu.c_municipio_seq'::regclass);
END IF;
return NEW;
end;

Con esto da igual el id que le asigne Liferay.