<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Diego Plentz &#187; postgre</title>
	<atom:link href="http://plentz.org/tag/postgre/feed/" rel="self" type="application/rss+xml" />
	<link>http://plentz.org</link>
	<description>plentiful thoughts from my empty head</description>
	<lastBuildDate>Sat, 03 Jul 2010 06:17:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Hibernate com PostGIS</title>
		<link>http://plentz.org/2007/03/28/hibernate-com-postgis/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=hibernate-com-postgis</link>
		<comments>http://plentz.org/2007/03/28/hibernate-com-postgis/#comments</comments>
		<pubDate>Thu, 29 Mar 2007 03:06:21 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[hibernate]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[postgis]]></category>
		<category><![CDATA[postgre]]></category>

		<guid isPermaLink="false">http://plentz.org/2007/03/28/hibernate-com-postgis/</guid>
		<description><![CDATA[Uns meses atrás tive um problema com o uso do Hibernate, em um caso um tanto quanto incomum: o projeto usava Ingres, um banco de dados muito pouco usado, e com algumas particularidades idiotas (sendo gentíl com eles). O tipo responsável por armazenar as datas no Ingres, diferentemente de todos os outros bancos que já [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/supriya/86805710/" title="Green pentagons"><img src="http://farm1.static.flickr.com/40/86805710_dbe9c536bf_m.jpg" alt="Green pentagons" height="180" width="240" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;" /></a></p>
<p>Uns meses atrás tive um problema com o uso do <a href="http://hibernate.org/">Hibernate</a>, em um caso um tanto quanto incomum: o projeto usava <a href="http://www.ingres.com/">Ingres</a>, um banco de dados muito pouco usado, e com algumas particularidades idiotas (sendo gentíl com eles). O tipo responsável por armazenar as datas no Ingres, diferentemente de todos os outros bancos que já vi, aceita três &#8220;estados&#8221; nas colunas de data: uma data (óbvio), null, <strong>&#8221;</strong> &#8211; sim, uma <em>empty string</em>.</p>
<p>Com isto, eu não poderia usar as classes padrão para datas no Java, acabei criando uma classe Data para tratar desses estados. Como o tipo foi criado por mim, o Hibernate não oferece nada pronto (por razões óbvias), tive que achar uma alternativa.</p>
<p>Lendo um pouco <a href="http://hibernate.org/hib_docs/v3/reference/en/html_single/">a referência</a>, mais especificamente o capítulo <a href="http://hibernate.org/hib_docs/v3/reference/en/html_single/#mapping-types-custom"><em>Custom value types</em></a>, descobri que para esses casos especiais, onde muitos já apelariam para alguma forma menos ortodoxa, o Hibernate oferece um mecanismo muito poderoso : os <a href="http://www.hibernate.org/hib_docs/v3/api/org/hibernate/usertype/UserType.html">UserTypes</a>.</p>
<p>Um UserType é basicamente uma interface que permite a implementação de como um determinado tipo será recuperado e persistido no seu banco de dados. Este recurso é extremamente útil e me salvou graciosamente.</p>
<p>E porque estou escrevendo isso tudo? Recebi hoje uma dúvida bem interessante por mensagem privada no <a href="http://guj.com.br">GUJ</a>. O usuário perguntava se haveria possibilidade de usar Hibernate em conjunto com o banco <a href="http://postgis.refractions.net/">PostGIS</a> &#8211; focado em armazenar dados geométricos.</p>
<p>O principal desafio é como mapear os dados que são armazenados em Geometry, como são chamados os tipos geométricos no PostGIS. Como não existe nenhum tipo nativo do Java que seria correspondente (e nem a especificação do <a href="http://java.sun.com/javase/technologies/database/">JDBC</a> preve isso &#8211; tipos clob, lobs e variantes não contam!), o trabalho pode ser um pouco mais complicado que se imagina.</p>
<p>Dando uma pesquisada, acabei encontrado uma thread da lista de users do PostGIS que trata exatamente disso. <a href="http://www.nabble.com/PostGIS---hibernate---EJB3-t2064211.html">Nela</a> é apresentada uma solução elegante para o tratamento dos tipos no Hibernate &#8211; e que acabou virando parte do projeto. <a href="http://postgis.com/support/wiki/index.php?SpatialEJB3">SpatialEJB3</a> nada mais é que um UserType (<a href="http://svn.refractions.net/postgis/trunk/java/ejb3/src/org/postgis/hibernate/GeometryType.java">GeometryType</a> no caso) com a implementação responsável por tratar o tipo Geometry. Ele pode ser usadao tanto com Hibernate puro, quanto para EJB3. Só achei estranho que as classes ainda não estão no <a href=" http://postgis.refractions.net/download/postgis.jar">postgis.jar</a>.</p>
<p>Para usar o recurso, fica extremamente simples:</p>
<p><code>        @Type(type = "org.postgis.hibernate.GeometryType")<br />
        public Geometry getLocation(){<br />
                return location;<br />
        }</code></p>
<p>No site é possível encontrar a <a href="http://svn.refractions.net/postgis/trunk/java/ejb3/ejb3spatial.pdf">documentação do projeto</a>.</p>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=156&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2007/03/28/hibernate-com-postgis/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
