quinta-feira, 10 de novembro de 2011

Oracle - Select por mês/dia/ano


Selecionar todos os usuários cadastrados no mês de Janeiro/2011 (01/2011):

select
   usuario.nome
from
  usuario
where
to_char(insert_data, 'mm/yyyy') = '01/2011'

 
ou

select
   usuario.nome
from
  usuario
where
to_char(insert_data, 'mon/yyyy') = 'jan/2011'


Com uma pequena alteração você pode retornar todos os usuários cadastrados em Janeiro de qualquer ano:

select
   usuario.nome
from
  usuario
where
to_char(insert_data, 'mm') = '01'


terça-feira, 11 de outubro de 2011

Exemplo de herença no Hibernate

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType=DiscriminatorType.CHAR,length=1,name="tipo_pessoa")
@DiscriminatorValue(value="0")
@DiscriminatorFormula(value = "case when tipo_pessoa is null then 'F' end")
// Outro exemplo de @DiscriminatorFormula
//@DiscriminatorFormula(value = "case when tipo_pessoa in ('X', 'Y', 'Z') then 'F' end")
@SequenceGenerator(name="seq", sequenceName="seq", allocationSize=1)
public class Pessoa{
   @Id
   @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq")
   private int id;
   private String tipo_pessoa;
}

@Entity
@SequenceGenerator(name="seq", sequenceName="seq", allocationSize=1)
@DiscriminatorValue(value="J")
public class PessoaJuridica Extendes Pessoa{
   private Integer cnpj;
}

@Entity
@SequenceGenerator(name="seq", sequenceName="seq", allocationSize=1)
@DiscriminatorValue(value="F")
public class PessoaFisica Extendes Pessoa{
   private Integer cpf;
}

segunda-feira, 10 de outubro de 2011

window.confirm em a4j:commandButton

<a4j:commandButton
        reRender="rdtFollowp"
        onclick="if (! window.confirm('Confirma?') ) {return false}"
        actionListener="#{processoImportacaoMB.deleteRegFlp}"
        image="/imagens/ImagensUtilizadas/16x16/remove.png"
        title="Excluir" >  
    <a4j:actionparam id="deleteRegFlp" value="#{flp.id}" name="pDelteteFlp"/>
</a4j:commandButton>

quarta-feira, 28 de setembro de 2011

java.sql.SQLException: ORA-01445

Erro:

java.sql.SQLException: ORA-01445: não é possível selecionar nem gerar amostragem para ROWID em uma view de junção sem uma tabela preservada com chaves.

Esse é um Bug do Oracle que afeta ao menos as versões:
9.2.0.6
10.1.0.4
10.2.0.1

O erro ocorre quando o retorno da SQL excede certo número de colunas.  Esse número excessivo de colunas é geralmente  causado por joins (principalmente quando utiliza-se um framework de persistência ex: Hibernate).

Para resolver o problema:

1) Atualize a versão do Oracle:
9.2.0.8
10.1.0.5
10.2.0.2
11g 
Ou

2)  Adicione @Fetch(FetchMode.SELECT)a alguns de seus relacionamentos. Com isso, será gerado um SQL a parte, o que fará com que o primeiro SQL não tenha o limite de coluna excedido.

Ex:

@OneToOne
@Fetch(FetchMode.SELECT)
@JoinColumn(name="agentecarga_id", insertable=false,updatable=false)
private Contato agenteCarga;

sexta-feira, 5 de agosto de 2011

h:inputTextarea sem rolagem e bordas

Útil para impressão de campos BLOB/CLOB, pois preserva as quebras de linhas.


<h:inputTextarea
  rows="10"
  cols="120"
  readonly="true"
  value=""
  style="overflow:auto;height:200px;width:400px;border-style:hidden;margin:0px;padding:0px;"/>

segunda-feira, 1 de agosto de 2011

Oracle: Expressoes Regulares (REGEXP)


REGEXP_LIKE (telefone, '^\d*[0-9](\.\d*[0-9])?$'). Em um where, retorna os registros que contenham apenas números no campo telefone.

Exemplos:
Tipo
EXPRESSAO REGULAR
Examplo
Data (dd/mm/aaaa)
^([0-9]|[0,1,2][0-9]|3[0,1])/([\d]|1[0,1,2])/\d{4}$
21/12/2007

Numero Decimal
^\d*[0-9](\.\d*[0-9])?$
234.342

Arquivos Documentos
^[a-zA-Z0-9-_\.]+\.(pdf|txt|doc|csv)$
world-domination.pdf

E-mail
^([0-9a-zA-Z]+([_.-]?[0-9a-zA-Z]+)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$
info@lymas.com.br

Codigo Cor HTML
^#?([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?$
#00ccff

Arquivo de Imagem
^[a-zA-Z0-9-_\.]+\.(jpg|gif|png)$
new-pic_company.jpg

Endereco IP
^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})$
192.168.0.1

Arquivos Multimedia
^[a-zA-Z0-9-_\.]+\.(swf|mov|wma|mpg|mp3|wav)$
company-presentation.swf

Data Formato Mysql
^\d{4}-(0[0-9]|1[0,1,2])-([0,1,2][0-9]|3[0,1])$
2005-09-02

Telefone (BR)
^\(?\d{2}\)?[\s-]?\d{4}-?\d{4}$
(11) 5555-1977

Codigo Postal (EUA)
^([A-Z][0-9]){3}$
V2B2S3

Hora (HH:MM)
^([0-1][0-9]|[2][0-3])(:([0-5][0-9])){1,2}$
12:29

URL
^(http[s]?://|ftp://)?(www\.)?[a-zA-Z0-9-\.]+\.(com|org|net|mil|edu|ca|co.uk|com.au|gov|br)$
http://www.google.com

Telefone Internacional
^(([0-9]{1})*[- .(]*([0-9a-zA-Z]{3})*[- .)]*[0-9a-zA-Z]{3}[- .]*[0-9a-zA-Z]{4})+$
1.245.532.3422

Fonte: http://tools.lymas.com.br/regexp_br.php

quarta-feira, 18 de maio de 2011

java.lang.NoClassDefFoundError: Could not initialize class

Erro:
java.lang.NoClassDefFoundError: Could not initialize class br.com.teste.ganymede.util.HibernateUtil

15:36:30,543 INFO  [CollectionBinder] Mapping collection: br.com.teste.ganymede.modelo.operacional.Mawb.hawbs -> AbreProcesso
15:36:30,549 INFO  [Version] Hibernate Validator 3.1.0.GA
15:36:30,637 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
java.lang.NoClassDefFoundError: Could not initialize class br.com.teste.ganymede.util.HibernateUtil
      at br.com.teste.ganymede.util.HibernateSessionfilter.doFilter(HibernateSessionfilter.java:29)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
      at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
      at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
      at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
      at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
      at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
      at java.lang.Thread.run(Unknown Source)

Origem do problema:
public class DespesaHawb implements Serializable{
            
      @ManyToOne
      // Origem do problema aqui!
      @JoinColumn(name="hawb_id")
      private AbreProcesso hawb;
    
      @OneToOne
      // Assim funciona!
      @JoinColumn(name="despesa_id",insertable=false,updatable=false)
      private Despesa despesa;
     
      @OneToOne
      // Assim funciona, pois a propriedade usuario esta anotada!
      @JoinColumn(name="insert_usuario")
      private Usuario usuario;
     
      @Id
      @GeneratedValue
     
generator="seq_despesahawb",strategy=GenerationType.SEQUENCE)
      private int id;
      private Integer despesa_id;
      private Double valor;
      private String moeda_codigo;
      private Double valor_moeda;
      private Double taxa_conversao;
      private Double valor_real;
      @Column(insertable=false,updatable=false)
      private Integer insert_usuario;
      @Column(insertable=false,updatable=false)
      private Date insert_data;
      private String hawb_id;
      private String tipo;   

Solução:
1)       Remover a propriedade hawb_id deixando somente o objeto hawb.

Ou
2)       Anotar a propridade hawb_id com @Column(insertable=false,updatable=false)
   Ou
3) Alterar o @ManyToOne para:@ManyToOne@JoinColumn(name="hawb_id",insertable=false,updatable=false)private AbreProcesso hawb;