Solução: Altere a propriedade @Fetch de alguns mapeamentos para @Fetch(FetchMode.SELECT).
De:
public class ProcessoImp extends Processo implements Serializable, Cloneable{
@OneToOne
@JoinColumn(name="transportadorinternacional_id", insertable=false,updatable=false)
private Contato transportadorInternacional;
@OneToOne
@Fetch(FetchMode.JOIN)
@JoinColumn(name="moeda_valor_vmld", insertable=false,updatable=false)
private Moeda moedaVmld;
}
Para:
public class ProcessoImp extends Processo implements Serializable, Cloneable{
@OneToOne
@Fetch(FetchMode.SELECT)
@JoinColumn(name="transportadorinternacional_id", insertable=false,updatable=false)
private Contato transportadorInternacional;
@OneToOne
@Fetch(FetchMode.SELECT)
@JoinColumn(name="moeda_valor_vmld", insertable=false,updatable=false)
private Moeda moedaVmld;
}
terça-feira, 2 de julho de 2013
terça-feira, 25 de junho de 2013
org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations):
// Estrutura
public class LancamentoCc implements Serializable,
Comparable<LancamentoCc>,Cloneable{
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="str_nro_processo",referencedColumnName="nref", insertable=false,updatable=false)
private AbreProcesso processo;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="int_movimento_conta", insertable=false, updatable=false)
private
MovimentoCc movimento;
}
public class AbreProcesso implements
Serializable,Cloneable {
@OneToMany(mappedBy="processo", cascade =
CascadeType.ALL,fetch=FetchType.EAGER, orphanRemoval = true)
@Fetch(FetchMode.SUBSELECT)
protected
Collection<LancamentoCc> movimentos = new
ArrayList<LancamentoCc>();
}
public class MovimentoCc implements Serializable{
@OneToMany(mappedBy="movimento", cascade = CascadeType.ALL,
fetch = FetchType.EAGER ,orphanRemoval=false)
@Fetch(FetchMode.SELECT)
private
List<LancamentoCc> lancamentos = new
ArrayList<LancamentoCc>();
}
// Dessa forma
ocorre o erro
public String delete(ContaReceber conta) {
public String delete(ContaReceber conta) {
try{
dao = new
LancamentoContaDao<ContaReceber>(HibernateUtil.getSession(),
ContaReceber.class);
dao.delete(conta);
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
// Dessa forma funciona
public String delete(ContaReceber conta) {
try{
Dao<AbreProcesso> dao = new
Dao<AbreProcesso>(HibernateUtil.getSession(), AbreProcesso.class);
AbreProcesso processo =
conta.getProcesso();
processo.getMovimentos().remove(conta);
dao.save(processo);
}catch (Exception e) {
e.printStackTrace()
}
return null;
}
segunda-feira, 17 de junho de 2013
java.util.ConcurrentModificationException
Causa do erro
for(Lancamento lanc : processo.getLancamentos() ){
if(lanc.getStrOrigem() != null && lanc.getStrOrigem().equals("FE")){
processo.getLancamentos().remove(lanc);
}
}
Solução, usar iterator
for (Iterator<Lancamento> iterator = processo.getLancamentos().iterator(); iterator.hasNext();) {
Lancamento lancamento = iterator.next();
if(lancamento.getStrOrigem() != null && lancamento.getStrOrigem().equals("FE")){
iterator.remove();
}
}
Fonte: http://www.guj.com.br/java/30323-erro-com-collections-javautilconcurrentmodificationexception
sexta-feira, 14 de junho de 2013
h:selectOneMenu com converter
Classe a ser convertida
@Entity
public class Comissao implements Serializable{
@Id
private Integer id;
private String descricao;
}
Classe onda a classe a ser convertida é utilizada
@Entity
public class Processo implements Serializable{
// Podem ocorrer problemas durante o carregamento do h:selectOneMenu, se marcado como LAZY
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name="comissaoId")
protected Comissao comissao;
}
Converter
public class ConverterComissao implements Converter{
@Override
public Object getAsObject(FacesContext context, UIComponent component, String string) {
if(string == null || string.isEmpty()){
return null;
}
Dao<Comissao> dao = new Dao<Comissao>(HibernateUtil.getSession(),Comissao.class);
Integer id = Integer.valueOf(string);
return dao.get(id);
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object object) {
Comissao comissao = (Comissao) object;
if(comissao == null || comissao.getInt_id() == null){
return null;
}
return String.valueOf(comissao.getId());
}
}
Função para popular o h:selectOneMenu
public List<Comissao> comboComissao(){
Dao<Comissao> dao;
dao = new Dao<Comissao>(HibernateUtil.getSession(),Comissao.class);
Comissao comissao = new Comissao();
comissao.setStr_descricao("");
comissao.setInt_id(null);
List<Comissao> list = new ArrayList<Comissao>();
list.add(comissao);
try{
list.addAll( dao.findAll("int_id", false) );
}catch (Exception e) {
new GeraFacesMessage("ATENÇÃO: OCORREU UM ERRO DURANTE O PROCESSAMENTO, A OPERAÇÃO NÃO FOI EFETUADA! \n",e);
e.printStackTrace();
}
return list;
}
O h:selectOneMenu
<h:selectOneMenu value="#{fechamentoMB.processo.comissao}" maxListHeight="50px;" converter="converterComissao">
<f:selectItems value="#{selectItems.comboComissao}" var="comissao" itemValue="#{comissao}" itemLabel="#{comissao.descricao}" />
<f:ajax event="change" render="optPanel" listener="#fechamentoMB.changeListenerComissao()}"/>
</h:selectOneMenu>
quarta-feira, 15 de maio de 2013
JSF: Exibir um popup durante a execução de um evento
<a4j:commandButton
status="waitModalStatus"
title="Enviar arquivo via FTP"
actionListener="#{processoMB.sendFtp(upload)}"
image="/resources/images/16x16/up.png">
id="waitModal" style="text-align:center" autosized="true" modal="true" width="200" >
<h:graphicImage library="images" name="ajaxloader32.gif" alt="ai"/><br />
<h:outputText value="Transmitindo o arquivo, aguarde!" />
</rich:popupPanel>
<a4j:status name="waitModalStatus">
<f:facet name="start">
<rich:componentControl event="start" operation="show" target="waitModal" />
</f:facet>
<f:facet name="stop">
<rich:componentControl event="stop" operation="hide" target="waitModal" />
</f:facet>
</a4j:status>
segunda-feira, 13 de maio de 2013
Copiar arquivos no Java
Dessa forma o arquivo de destino não é alterado durante a cópia:
- public static void copyFile(File source, File destination) throws IOException {
- if (destination.exists())
- destination.delete();
- FileChannel sourceChannel = null;
- FileChannel destinationChannel = null;
- try {
- sourceChannel = new FileInputStream(source).getChannel();
- destinationChannel = new FileOutputStream(destination).getChannel();
- sourceChannel.transferTo(0, sourceChannel.size(),
- destinationChannel);
- } finally {
- if (sourceChannel != null && sourceChannel.isOpen())
- sourceChannel.close();
- if (destinationChannel != null && destinationChannel.isOpen())
- destinationChannel.close();
- }
- }
Dessa forma o arquivo de destino pode sofrer alterações:
- public class Teste {
- public static void main(String[] args) throws IOException {
- File arquivoOrigem = new File("c:/temp/original.txt");
- FileReader fis = new FileReader(arquivoOrigem);
- BufferedReader bufferedReader = new BufferedReader(fis);
- StringBuilder buffer = new StringBuilder();
- String line = "";
- while ((line = bufferedReader.readLine()) != null) {
- buffer.append(line).append("\n");
- }
- fis.close();
- bufferedReader.close();
- File arquivoDestino = new File("C:/temp/copia.txt");
- FileWriter writer = new FileWriter(arquivoDestino);
- writer.write(buffer.toString());
- writer.flush();
- writer.close();
- }
- }
quarta-feira, 17 de abril de 2013
JSF: Setar foco em um elemento que foi renderizado
<p:outputPanel id="optPanel">
<h:inputText value="#{myBean.nome}" id="nome"/>
<h:inputText>
<a4j:ajax event="complete" render="optPanel" oncomplete="nome.focus();"/>
</h:inputText>
</p:outputPanel>
Assinar:
Postagens (Atom)