<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>https://wiki.rodrigogml.eng.br/index.php?action=history&amp;feed=atom&amp;title=RFWValidator</id>
	<title>RFWValidator - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.rodrigogml.eng.br/index.php?action=history&amp;feed=atom&amp;title=RFWValidator"/>
	<link rel="alternate" type="text/html" href="https://wiki.rodrigogml.eng.br/index.php?title=RFWValidator&amp;action=history"/>
	<updated>2026-05-06T14:24:55Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.37.0</generator>
	<entry>
		<id>https://wiki.rodrigogml.eng.br/index.php?title=RFWValidator&amp;diff=146&amp;oldid=prev</id>
		<title>Rodrigogml: /* Preparando */</title>
		<link rel="alternate" type="text/html" href="https://wiki.rodrigogml.eng.br/index.php?title=RFWValidator&amp;diff=146&amp;oldid=prev"/>
		<updated>2023-07-29T18:53:19Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Preparando&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pt-BR&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Edição anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Edição das 18h53min de 29 de julho de 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;Linha 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linha 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Preparando =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Preparando =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A classe &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;é abstrata e &lt;/del&gt;precisa &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;terminar a implementação de alguns métodos. Esses métodos permitem que o &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; faça &lt;/del&gt;consultas no banco de dados para conseguir testar a unicidade de valores, se o objeto a ser alterado já está no banco de dados, se objetos associados existem no banco, entre outras diversas validações que precisam consultar o banco de dados.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A classe &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; precisa &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;fazer &lt;/ins&gt;consultas no banco de dados para conseguir testar a unicidade de valores &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nos objetos&lt;/ins&gt;, se o objeto a ser alterado &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;de fato &lt;/ins&gt;já está &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;consta &lt;/ins&gt;no banco de dados, se objetos associados existem no banco, entre outras diversas validações que precisam consultar o banco de dados.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;O métodos seguem a mesma assinatura existente no [[RFWDAO]], já &lt;/del&gt;que &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;é feito para &lt;/del&gt;o &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mesmo framework. Mas, é possível implementar a execução da consulta e o retorno conforme necessário pelo &lt;/del&gt;&amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;sem utilizar o &lt;/del&gt;RFW &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ORM&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Para &lt;/ins&gt;que &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;todas as validações sejam realiadas &lt;/ins&gt;o &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;deve receber uma instância do [[RFWDataProviderInterface]] na sua construção. Veja a documentação da interface para mais detalhes, mas seu objetivo é justamente promover acesso a leitura de objetos do banco de dados para componentes do &lt;/ins&gt;RFW.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{nota|Métodos de Busca com RFWMO|Como os métodos de buscar implementados fazem uso do RFWMO, e normalmente sem a utilização do RFW ORM o [[RFWMO]] não tem muita utilizada, será necessário converter as condições de filtro do [[RFWMO]] para que o seu sistema de banco consiga realizar a consulta.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;O [[RFWMO]] contém um método &amp;#039;&amp;#039;&amp;#039;.printConditions()&amp;#039;&amp;#039;&amp;#039; que talvez ajude de alguma forma  para criar uma a sua consulta, mesmo que seja só para depurar as condições. Note também que não serão impressos os nomes das colunas das tabela, mas sim o caminho dos campos.}}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Caso não tenha interesse em fazer essa ligação com o banco de dados, é possível &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;instanciar &lt;/ins&gt;o &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;sem passar &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;instância do [[RFWDataProviderInterface]]&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ele fará todas as validações possívels sem consultar outros objetos&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Caso não tenha interesse em fazer essa ligação com o banco de dados, é possível &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;desabilitar as validações que envolvem o banco de dados. Para isso basta implementar &lt;/del&gt;o &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;método &amp;#039;&amp;#039;&amp;#039;areDataBaseValidationsEnabled()&amp;#039;&amp;#039;&amp;#039; retornando false. Este método indicará ao &lt;/del&gt;&amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;se deve (true) ou não (false) executar essas validações.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Depois de extendida &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;classe e implementadas os métodos (ou não)&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;a classe estará pronta para ser utilizada&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Basta criar uma instância e chamar os métodos desejados! :)&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Como Utilizar =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Como Utilizar =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Rodrigogml</name></author>
	</entry>
	<entry>
		<id>https://wiki.rodrigogml.eng.br/index.php?title=RFWValidator&amp;diff=137&amp;oldid=prev</id>
		<title>Rodrigogml: /* Preparando */</title>
		<link rel="alternate" type="text/html" href="https://wiki.rodrigogml.eng.br/index.php?title=RFWValidator&amp;diff=137&amp;oldid=prev"/>
		<updated>2023-07-28T14:48:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Preparando&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pt-BR&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Edição anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Edição das 14h48min de 28 de julho de 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l13&quot;&gt;Linha 13:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linha 13:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Caso não tenha interesse em fazer essa ligação com o banco de dados, é possível desabilitar as validações que envolvem o banco de dados. Para isso basta implementar o método &amp;#039;&amp;#039;&amp;#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;isDataBaseValidationsEnabled&lt;/del&gt;()&amp;#039;&amp;#039;&amp;#039; retornando false. Este método indicará ao &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; se deve (true) ou não (false) executar essas validações.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Caso não tenha interesse em fazer essa ligação com o banco de dados, é possível desabilitar as validações que envolvem o banco de dados. Para isso basta implementar o método &amp;#039;&amp;#039;&amp;#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;areDataBaseValidationsEnabled&lt;/ins&gt;()&amp;#039;&amp;#039;&amp;#039; retornando false. Este método indicará ao &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; se deve (true) ou não (false) executar essas validações.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Depois de extendida a classe e implementadas os métodos (ou não), a classe estará pronta para ser utilizada. Basta criar uma instância e chamar os métodos desejados! :)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Depois de extendida a classe e implementadas os métodos (ou não), a classe estará pronta para ser utilizada. Basta criar uma instância e chamar os métodos desejados! :)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Como Utilizar =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Como Utilizar =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Rodrigogml</name></author>
	</entry>
	<entry>
		<id>https://wiki.rodrigogml.eng.br/index.php?title=RFWValidator&amp;diff=136&amp;oldid=prev</id>
		<title>Rodrigogml: /* Como Utilizar */</title>
		<link rel="alternate" type="text/html" href="https://wiki.rodrigogml.eng.br/index.php?title=RFWValidator&amp;diff=136&amp;oldid=prev"/>
		<updated>2023-07-28T14:42:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Como Utilizar&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pt-BR&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Edição anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Edição das 14h42min de 28 de julho de 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Linha 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linha 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;O &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; é um serviço capaz de realizar validações nos [[RFWVO]] a partir das [[RFWMetaAnnotations]]. Todas as [[RFWMetaAnnotations]] serão lidas e analizadas, sempre que o valor de algum atributo não satisfazer as definições dos meta dados definidos nas annotations o &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; resultará em erros de validação.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;O &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; é um serviço capaz de realizar validações nos [[RFWVO]] a partir das [[RFWMetaAnnotations]]. Todas as [[RFWMetaAnnotations]] serão lidas e analizadas, sempre que o valor de algum atributo não satisfazer as definições dos meta dados definidos nas annotations o &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; resultará em erros de validação.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;= Preparando =&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;A classe &#039;&#039;&#039;RFWValidator&#039;&#039;&#039; é abstrata e precisa terminar a implementação de alguns métodos. Esses métodos permitem que o &#039;&#039;&#039;RFWValidator&#039;&#039;&#039; faça consultas no banco de dados para conseguir testar a unicidade de valores, se o objeto a ser alterado já está no banco de dados, se objetos associados existem no banco, entre outras diversas validações que precisam consultar o banco de dados.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;O métodos seguem a mesma assinatura existente no [[RFWDAO]], já que é feito para o mesmo framework. Mas, é possível implementar a execução da consulta e o retorno conforme necessário pelo &#039;&#039;&#039;RFWValidator&#039;&#039;&#039; sem utilizar o RFW ORM.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{nota|Métodos de Busca com RFWMO|Como os métodos de buscar implementados fazem uso do RFWMO, e normalmente sem a utilização do RFW ORM o [[RFWMO]] não tem muita utilizada, será necessário converter as condições de filtro do [[RFWMO]] para que o seu sistema de banco consiga realizar a consulta.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;O [[RFWMO]] contém um método &#039;&#039;&#039;.printConditions()&#039;&#039;&#039; que talvez ajude de alguma forma  para criar uma a sua consulta, mesmo que seja só para depurar as condições. Note também que não serão impressos os nomes das colunas das tabela, mas sim o caminho dos campos.}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Caso não tenha interesse em fazer essa ligação com o banco de dados, é possível desabilitar as validações que envolvem o banco de dados. Para isso basta implementar o método &#039;&#039;&#039;isDataBaseValidationsEnabled()&#039;&#039;&#039; retornando false. Este método indicará ao &#039;&#039;&#039;RFWValidator&#039;&#039;&#039; se deve (true) ou não (false) executar essas validações.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Depois de extendida a classe e implementadas os métodos (ou não), a classe estará pronta para ser utilizada. Basta criar uma instância e chamar os métodos desejados! :)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Como Utilizar =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Como Utilizar =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Rodrigogml</name></author>
	</entry>
	<entry>
		<id>https://wiki.rodrigogml.eng.br/index.php?title=RFWValidator&amp;diff=50&amp;oldid=prev</id>
		<title>Rodrigogml: /* RFWMetaRelationship */</title>
		<link rel="alternate" type="text/html" href="https://wiki.rodrigogml.eng.br/index.php?title=RFWValidator&amp;diff=50&amp;oldid=prev"/>
		<updated>2023-06-27T15:04:07Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;RFWMetaRelationship&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pt-BR&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Edição anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Edição das 15h04min de 27 de junho de 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l114&quot;&gt;Linha 114:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linha 114:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** &amp;#039;&amp;#039;&amp;#039;Unicidade&amp;#039;&amp;#039;&amp;#039; - Quando um relacionamento &amp;#039;&amp;#039;Associação&amp;#039;&amp;#039; é marcado como único o RFWValidator procura no banco para ver se algum outro objeto já está &amp;quot;se relacionando&amp;quot; com esse mesmo objeto (ou com algum dos objetos em caso de coleção). &amp;#039;&amp;#039;&amp;#039;RFW_000345&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** &amp;#039;&amp;#039;&amp;#039;Unicidade&amp;#039;&amp;#039;&amp;#039; - Quando um relacionamento &amp;#039;&amp;#039;Associação&amp;#039;&amp;#039; é marcado como único o RFWValidator procura no banco para ver se algum outro objeto já está &amp;quot;se relacionando&amp;quot; com esse mesmo objeto (ou com algum dos objetos em caso de coleção). &amp;#039;&amp;#039;&amp;#039;RFW_000345&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;**: Em caso de coleções, O RFWValidator também procura se o não há relacionamentos múltiplos com o mesmo objeto dentro da coleção. &amp;#039;&amp;#039;&amp;#039;RFW_000412&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;**: Em caso de coleções, O RFWValidator também procura se o não há relacionamentos múltiplos com o mesmo objeto dentro da coleção. &amp;#039;&amp;#039;&amp;#039;RFW_000412&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Composição&amp;#039;&amp;#039;&amp;#039; - Validações para relacionamento do tipo &amp;#039;&amp;#039;&amp;#039;Composição&amp;#039;&amp;#039;&amp;#039;. (Veja em [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;RFWMeta_Annotations&lt;/del&gt;#RFWMetaRelationshipField]])&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Composição&amp;#039;&amp;#039;&amp;#039; - Validações para relacionamento do tipo &amp;#039;&amp;#039;&amp;#039;Composição&amp;#039;&amp;#039;&amp;#039;. (Veja em [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;RFWMetaAnnotations&lt;/ins&gt;#RFWMetaRelationshipField]])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** &amp;#039;&amp;#039;&amp;#039;Campo Obrigatório&amp;#039;&amp;#039;&amp;#039; - Se estiver definida como obrigatória (required = true), valida se o atributo não é nulo. &amp;quot;RFW_000344&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** &amp;#039;&amp;#039;&amp;#039;Campo Obrigatório&amp;#039;&amp;#039;&amp;#039; - Se estiver definida como obrigatória (required = true), valida se o atributo não é nulo. &amp;quot;RFW_000344&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;**: Note que verificar se o atributo não está nulo pode não significar que o relacionamento existe em casos em que o atributo é uma List ou Map. Nesses casos convêm declarar o tamanho mínimo da lista.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;**: Note que verificar se o atributo não está nulo pode não significar que o relacionamento existe em casos em que o atributo é uma List ou Map. Nesses casos convêm declarar o tamanho mínimo da lista.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Rodrigogml</name></author>
	</entry>
	<entry>
		<id>https://wiki.rodrigogml.eng.br/index.php?title=RFWValidator&amp;diff=31&amp;oldid=prev</id>
		<title>Rodrigogml: Criou página com &#039;O &#039;&#039;&#039;RFWValidator&#039;&#039;&#039; é um serviço capaz de realizar validações nos RFWVO a partir das RFWMetaAnnotations. Todas as RFWMetaAnnotations serão lidas e analizadas, sempre que o valor de algum atributo não satisfazer as definições dos meta dados definidos nas annotations o &#039;&#039;&#039;RFWValidator&#039;&#039;&#039; resultará em erros de validação.  = Como Utilizar =  O modo de usar é bem simples. O &#039;&#039;&#039;RFWValidator&#039;&#039;&#039; oferece uma classe estática de mesmo nome, com apenas 3 m...&#039;</title>
		<link rel="alternate" type="text/html" href="https://wiki.rodrigogml.eng.br/index.php?title=RFWValidator&amp;diff=31&amp;oldid=prev"/>
		<updated>2022-11-17T17:04:48Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;O &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; é um serviço capaz de realizar validações nos &lt;a href=&quot;/index.php?title=RFWVO&quot; title=&quot;RFWVO&quot;&gt;RFWVO&lt;/a&gt; a partir das &lt;a href=&quot;/index.php?title=RFWMetaAnnotations&quot; title=&quot;RFWMetaAnnotations&quot;&gt;RFWMetaAnnotations&lt;/a&gt;. Todas as &lt;a href=&quot;/index.php?title=RFWMetaAnnotations&quot; title=&quot;RFWMetaAnnotations&quot;&gt;RFWMetaAnnotations&lt;/a&gt; serão lidas e analizadas, sempre que o valor de algum atributo não satisfazer as definições dos meta dados definidos nas annotations o &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; resultará em erros de validação.  = Como Utilizar =  O modo de usar é bem simples. O &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; oferece uma classe estática de mesmo nome, com apenas 3 m...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;O &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; é um serviço capaz de realizar validações nos [[RFWVO]] a partir das [[RFWMetaAnnotations]]. Todas as [[RFWMetaAnnotations]] serão lidas e analizadas, sempre que o valor de algum atributo não satisfazer as definições dos meta dados definidos nas annotations o &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; resultará em erros de validação.&lt;br /&gt;
&lt;br /&gt;
= Como Utilizar =&lt;br /&gt;
&lt;br /&gt;
O modo de usar é bem simples. O &amp;#039;&amp;#039;&amp;#039;RFWValidator&amp;#039;&amp;#039;&amp;#039; oferece uma classe estática de mesmo nome, com apenas 3 métodos estáticos e públicos. São eles:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;validateDelete(...)&amp;#039;&amp;#039;&amp;#039; - Usado para validar o objeto antes de excluí-lo.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;validateInsert(...)&amp;#039;&amp;#039;&amp;#039; - Valida o objeto para inseri-lo no banco.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;validateUpdate(...)&amp;#039;&amp;#039;&amp;#039; - Valida o objeto antes de atualiza-lo no banco de dados.&lt;br /&gt;
&lt;br /&gt;
Cada método deve ser chamado de acordo com a operação que o CRUD realizará com a entidade.&lt;br /&gt;
&lt;br /&gt;
As validações realizadas são dividias em dois grupos: &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Validações de Operação&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Validações da Entidade&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Validações de Operação ==&lt;br /&gt;
&lt;br /&gt;
Validações de operação são as validações que precisam ser feitas de acordo com a operação à ser realizada (Insert/Update/Delete). De acordo com a operação temos as seguintes validações:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Operação de Inserir&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;Validamos se a entidade não tem um ID definido&amp;#039;&amp;#039; - Nenhuma entidade pode ser inserida já com um ID definido. Em geral se um ID já existe para o objeto indica um provável erro de programação, indicando que o objeto devia ser atualizado e não inserido.&lt;br /&gt;
** &amp;#039;&amp;#039;Validamos se todas as entidades dos relacionamentos do tipo &amp;#039;&amp;#039;COMPOSITION&amp;#039;&amp;#039;&amp;#039; também estão sem ID&amp;#039;&amp;#039; - sub entidade que compõe o objeto principal não devem preexistir no banco de dados uma vez que não existem &amp;quot;por conta própria&amp;quot; muito menos são utilizadas por outras instâncias. A existência de um ID geralmente indica que o tipo de relacionamento está declarado errado.&lt;br /&gt;
** &amp;#039;&amp;#039;Realiza as Validações da Entidade&amp;#039;&amp;#039; - Valida se os demais dados da entidade são válidos de acordo com seus meta dados definidos nas annotations.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Operação de Atualizar&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;Validamos se a entidade tem um ID definido&amp;#039;&amp;#039; - A entidade para ser alterada precisa de um ID definido. Caso contrário não é possível identificar a entidade correta no banco de dados.&lt;br /&gt;
** &amp;#039;&amp;#039;Realiza as Validações da Entidade&amp;#039;&amp;#039; - Valida se os demais dados da entidade são válidos de acordo com seus meta dados definidos nas annotations.&lt;br /&gt;
&lt;br /&gt;
{{nota|Não validamos IDs de relacionamentos COMPOSITION em caso de Atualização|No caso de atualização não validamos se os objetos filhos do tipo COMPOSITION pois não temos como saber se é um novo objeto ou a atualização de um. Isto é, durante a atualização de uma entidade um relacionamento pode ser desfeito, pode ser criado ou pode ser alterado, e em casos de lista podem ganhar novas entidades, alterar ou manter as mesmas.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Operação de Excluir&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;Validamos se o Objeto realmente existe no banco&amp;#039;&amp;#039; - Para evitar problemas ou mesmo detectar problemas no sistema, verificamos se o objeto com o ID especificado ainda existe no banco de dados.&lt;br /&gt;
** &amp;#039;&amp;#039;Valida se a instância está em uso&amp;#039;&amp;#039; - Algumas entidades criam dependências umas com as outras, e caso a entidade tenha a marcação com a [[RFWMetaAnnotations]] &amp;#039;&amp;#039;&amp;#039;@RFWUsedBy&amp;#039;&amp;#039;&amp;#039;, o RFWValidator validará se a instância que deseja apagar não está em uso por alguma instância da entidade marcada na annotation.&lt;br /&gt;
&lt;br /&gt;
== Validações da Entidade ==&lt;br /&gt;
&lt;br /&gt;
Validações da entidade são as validações que devem ser feitas indiferente da operação que será realizada com o objeto. Geralmente são validações da estrutura e coesão das informações da entidade. Como por exemplo as validações individuais de cada atributo e seus meta dados. As validações geram mensagens de validações padrões indicadas abaixo. Para melhorar ou personalizar a mensagem de erro, basta tratar as RFWValidationException lançadas pelo RFWValidator comparar o código da exception encapsular em uma nova exception. As validações realizadas automaticamente pelo RFWValidator são:&lt;br /&gt;
&lt;br /&gt;
=== Validação das RFWMetaField Annotations===&lt;br /&gt;
&lt;br /&gt;
Todas as RFWMetaField são encontradas e validadas de acordo com os meta-dados disponíveis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== RFWMetaFields Comuns ====&lt;br /&gt;
&lt;br /&gt;
São as meta annotation para os fields de acordo com o seu tipo Java.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RFWMetaBigDecimalField&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Tipo Suportado&amp;#039;&amp;#039;&amp;#039; - Valida se a annotation está sendo usada em um attributo do tipo suportado. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000349&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Obrigatório&amp;#039;&amp;#039;&amp;#039; - Se estiver definida como obrigatória (required = true), valida se está preenchida. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000344&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Único&amp;#039;&amp;#039;&amp;#039; - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000345&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Valor Máximo&amp;#039;&amp;#039;&amp;#039; - O valor máximo do BigDecimal é dividido em dois atributos, já que não é possível definir um BigDecimal diretamente na annotation. Os atributos maxIntegerValue e maxFloatValue definem respectivamente o a parte inteira e a parte fracionária do maior valor aceito. Internamente os dois valores serão combinados em um BigDecimal para comparar com o valor definido na entidade. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000352&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Valor Mínimo&amp;#039;&amp;#039;&amp;#039; - Assim como o valor máximo, a definição do valor mínimo é dividido nos atributos minIntegerValue e minFloatValue. Os valores são combinados em um novo BigDecimal e comparados com o valor definido na entidade. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000353&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RFWMetaBooleanField&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Tipo Suportado&amp;#039;&amp;#039;&amp;#039; - Valida se a annotation está sendo usada em um attributo do tipo suportado. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000349&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Obrigatório&amp;#039;&amp;#039;&amp;#039; - Se estiver definida como obrigatória (required = true), valida se está preenchida. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000344&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Único&amp;#039;&amp;#039;&amp;#039; - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000345&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RFWMetaEnumField&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Tipo Suportado&amp;#039;&amp;#039;&amp;#039; - Valida se a annotation está sendo usada em um attributo do tipo suportado. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000349&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Obrigatório&amp;#039;&amp;#039;&amp;#039; - Se estiver definida como obrigatória (required = true), valida se está preenchida. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000344&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Único&amp;#039;&amp;#039;&amp;#039; - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000345&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RFWMetaIntegerField&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Tipo Suportado&amp;#039;&amp;#039;&amp;#039; - Valida se a annotation está sendo usada em um attributo do tipo suportado. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000349&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Obrigatório&amp;#039;&amp;#039;&amp;#039; - Se estiver definida como obrigatória (required = true), valida se está preenchida. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000344&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Único&amp;#039;&amp;#039;&amp;#039; - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000345&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Valor Máximo&amp;#039;&amp;#039;&amp;#039; - Se definido, valida se o valor do atributo não é maior que o valor definido no meta dado. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000352&amp;quot;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Valor Mínimo&amp;#039;&amp;#039;&amp;#039; - Se definido, valida se o valor do atributo não é menor que o valor definido no meta dado. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000353&amp;quot;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RFWMetaStringField&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Tipo Suportado&amp;#039;&amp;#039;&amp;#039; - Valida se a annotation está sendo usada em um attributo do tipo suportado. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000349&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Obrigatório&amp;#039;&amp;#039;&amp;#039; - Se estiver definida como obrigatória (required = true), valida se está preenchida. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000344&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Único&amp;#039;&amp;#039;&amp;#039; - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000345&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Comprimento Máximo&amp;#039;&amp;#039;&amp;#039; - Valida se o comprimento da String é menor que o tamanho máximo definido. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000348&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Comprimento Mínimo&amp;#039;&amp;#039;&amp;#039; - Valida se o comprimento da String é maior que o tamanho mínimo definido. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000350&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{stop|Busca por RFWMeta Não Suportadas|Caso alguma annotation seja encontrada no mesmo pacote das demais RFWMetaAnnotations e com o mesmo prefixo &amp;quot;RFWMeta&amp;quot; em seu nome uma annotation que o RFWValidator não conheça ele lançará uma RFWCriticalException para notificar que determinada annotation não está sendo validada. Evitando assim que &amp;quot;se esqueça&amp;quot; de validar informações do VO.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== RFWMetaFields Especiais ====&lt;br /&gt;
&lt;br /&gt;
São RFWMetaFields que modificam um tipo padrão do java para aceitar algum tipo específico de informação dos sistema.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RFWMetaStringCEPField&amp;#039;&amp;#039;&amp;#039; - Transforma um atributo string em um atributo de CEP&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Tipo Suportado&amp;#039;&amp;#039;&amp;#039; - Valida se a annotation está sendo usada em um atributo do tipo suportado. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000349&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Obrigatório&amp;#039;&amp;#039;&amp;#039; - Se estiver definida como obrigatória (required = true), valida se está preenchida. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000344&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Único&amp;#039;&amp;#039;&amp;#039; - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000345&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Valida CEP&amp;#039;&amp;#039;&amp;#039; - Valida se é um CEP Válido. Lança diferentes exceções dependendo do problema do CEP. A validação é feita pela RFWCEPDataFormatter.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RFWMetaStringCNPJField&amp;#039;&amp;#039;&amp;#039; - Transforma um atributo string em um atributo de CNPJ&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Tipo Suportado&amp;#039;&amp;#039;&amp;#039; - Valida se a annotation está sendo usada em um attributo do tipo suportado. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000349&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Obrigatório&amp;#039;&amp;#039;&amp;#039; - Se estiver definida como obrigatória (required = true), valida se está preenchida. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000344&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Único&amp;#039;&amp;#039;&amp;#039; - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000345&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Valida CNPJ&amp;#039;&amp;#039;&amp;#039; - Valida se é um CNPJ válido. Lança diferentes exceções dependendo do problema do CNPJ. A validação é feita pela RFWDocumentValidationUtils.validateCNPJ(...).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RFWMetaStringIEField&amp;#039;&amp;#039;&amp;#039; - Transforma um atributo string em um atributo de IE (Inscrição Estadual)&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Tipo Suportado&amp;#039;&amp;#039;&amp;#039; - Valida se a annotation está sendo usada em um attributo do tipo suportado. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000349&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Obrigatório&amp;#039;&amp;#039;&amp;#039; - Se estiver definida como obrigatória (required = true), valida se está preenchida. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000344&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Único&amp;#039;&amp;#039;&amp;#039; - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000345&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;UF&amp;#039;&amp;#039;&amp;#039; - Permite definir para qual UF esta IE deverá ser validada.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;UF Field&amp;#039;&amp;#039;&amp;#039; - Permite ao invés de definir uma UF fixa no atributo &amp;#039;&amp;#039;&amp;#039;UF&amp;#039;&amp;#039;&amp;#039;, definir o atributo da entidade onde encontrar a UF para validação. Caso o atributo definido na &amp;#039;&amp;#039;&amp;#039;UF Field&amp;#039;&amp;#039;&amp;#039; esteja nulo, a IE será validada contra qualquer estado.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Valida IE&amp;#039;&amp;#039;&amp;#039; - Valida se é uma IE válida. Lança diferentes exceções de acordo com a falha da IE.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RFWMetaStringPhoneField&amp;#039;&amp;#039;&amp;#039; - Transforma um atributo string em um atributo de Telefone no padrão do RFW: DDI|DDD|Telefone&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Tipo Suportado&amp;#039;&amp;#039;&amp;#039; - Valida se a annotation está sendo usada em um attributo do tipo suportado. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000349&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Obrigatório&amp;#039;&amp;#039;&amp;#039; - Se estiver definida como obrigatória (required = true), valida se está preenchida. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000344&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Único&amp;#039;&amp;#039;&amp;#039; - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. &amp;#039;&amp;#039;&amp;#039;&amp;quot;RFW_000345&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Valida Telefone&amp;#039;&amp;#039;&amp;#039; - Valida se o valor encontrado satisfaz os valores do padrão RFW de telefone. As validações são feitas pela classe RFWPhoneDataFormatter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== RFWMetaRelationship ====&lt;br /&gt;
&lt;br /&gt;
A RFWMetaRelationship tem a finalidade de definir o relacionamento entre entidades. De acordo com o relacionamento e as definições o RFWValidator faz as seguintes validações:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Associação&amp;#039;&amp;#039;&amp;#039; - Validações para relacionamento do tipo &amp;#039;&amp;#039;&amp;#039;Associação&amp;#039;&amp;#039;&amp;#039;. (Veja em [[RFWMetaAnnotations#RFWMetaRelationshipField]])&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Obrigatório&amp;#039;&amp;#039;&amp;#039; - Se estiver definida como obrigatória (required = true), valida se o atributo não é nulo. &amp;quot;RFW_000344&amp;quot;&lt;br /&gt;
** : Note que verificar se o atributo não está nulo pode não significar que o relacionamento existe em casos em que o atributo é uma List ou Map. Nesses casos convêm declarar o tamanho mínimo da lista.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Verifica se o Objeto tem um ID&amp;#039;&amp;#039;&amp;#039; - Para relacionamentos do tipo &amp;#039;&amp;#039;&amp;#039;Associação&amp;#039;&amp;#039;&amp;#039; é obrigatório que o objeto já exista no banco. A validação verifica se o objeto tem um ID definido e em seguinda busca no banco para garantir que o objeto exista de verdade e não apenas que o ID tenha sido definido.&lt;br /&gt;
**: Há casos em que o objeto sendo validado para inserção (ou mesmo novos objetos dentro de uma atualização) tem um relacionamento bi-direcional. Nestes casos o objeto principal pode ter um relacionamento do tipo composição, forçando a validação do objeto relacionado, enquanto que o objeto do relacionamento tem um relacionamento do tipo Associação. Nestes casos do relacionamento de Associação com objeto sem ID não falha, pois ela detecta que o relacionamento referencia um objeto que será inserido na mesma transação.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Ocorrências Mínimas&amp;#039;&amp;#039;&amp;#039; - Em caso de Lista ou Maps, o RFWValidator pode verificar se a coleção contém o mínimo de ocorrências dentro deles. Para isso é obrigatório definir o atributo &amp;#039;&amp;#039;minSize&amp;#039;&amp;#039; no relacionamento.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Unicidade&amp;#039;&amp;#039;&amp;#039; - Quando um relacionamento &amp;#039;&amp;#039;Associação&amp;#039;&amp;#039; é marcado como único o RFWValidator procura no banco para ver se algum outro objeto já está &amp;quot;se relacionando&amp;quot; com esse mesmo objeto (ou com algum dos objetos em caso de coleção). &amp;#039;&amp;#039;&amp;#039;RFW_000345&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
**: Em caso de coleções, O RFWValidator também procura se o não há relacionamentos múltiplos com o mesmo objeto dentro da coleção. &amp;#039;&amp;#039;&amp;#039;RFW_000412&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Composição&amp;#039;&amp;#039;&amp;#039; - Validações para relacionamento do tipo &amp;#039;&amp;#039;&amp;#039;Composição&amp;#039;&amp;#039;&amp;#039;. (Veja em [[RFWMeta_Annotations#RFWMetaRelationshipField]])&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Campo Obrigatório&amp;#039;&amp;#039;&amp;#039; - Se estiver definida como obrigatória (required = true), valida se o atributo não é nulo. &amp;quot;RFW_000344&amp;quot;&lt;br /&gt;
**: Note que verificar se o atributo não está nulo pode não significar que o relacionamento existe em casos em que o atributo é uma List ou Map. Nesses casos convêm declarar o tamanho mínimo da lista.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Validação Recursiva&amp;#039;&amp;#039;&amp;#039; - Para os objetos em um relacionamento do tipo &amp;#039;&amp;#039;&amp;#039;Composição&amp;#039;&amp;#039;&amp;#039; o RFWValidator validará campo a campo dos objetos presentes no relacionamento recursivamente. Isto quer dizer que o objeto será validado completamente como se a validação tivesse sido chamada para ele. Mesmo para relacionamentos em coleções, a validação será feita em cada um dos objetos.&lt;br /&gt;
&lt;br /&gt;
=== RFWAttributeRelation ===&lt;br /&gt;
&lt;br /&gt;
Caso a entidade tenha uma ou mais anotações de RFWAttributeRelation o RFWValidator validará as relações dos atributos conforme indicado e caso falhe, lançará a exceção definida no atributo exceptioncode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{nota|Atributos do Mesmo Tipo|A comparação deve ser feita entre atributos do mesmo tipo, caso contrário sempre falhará. E para operações diferente de EQUALS e NOTEQUALS, ambos os atributos devem implementar a interface Comparable&amp;lt;?&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
=== RFWUniqueConstraint ===&lt;br /&gt;
&lt;br /&gt;
Entidades que definem a RFWUniqueConstraint são validadas de forma que a unicidade do conjunto de atributos da entidade não se repita em nenhuma outra instância da mesma entidade.&lt;br /&gt;
&lt;br /&gt;
{{nota|Exclusão do Próprio Objeto|Embora seja uma validação da entidade, quando o objeto já têm um ID este objeto é automaticamente ignorado ao fazer a busca no banco de dados para evitar uma &amp;quot;falsa validação&amp;quot; contra o próprio objeto.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{stop|Duplicidade Interna|Apesar de validar a unicidade do objeto contra cadastros no banco, o RFWValidator ainda não suporta validar duplicidade dentro do próprio objeto. Isto é, se um objeto tiver uma lista de objetos com a [[RFWMetaAnnotations]] de Unique Contraint, e este tiver valores duplicados dentro da própria lista, o RFWValidator deixa passar, causando erro de SQL.&lt;br /&gt;
&lt;br /&gt;
Por enquanto é necessário realizar essa validação dentro da classe do validator específico do objeto.}}&lt;/div&gt;</summary>
		<author><name>Rodrigogml</name></author>
	</entry>
</feed>