Amigos,
Criei uma aplicação desktop no Netbeans, que é um cadastro simples de pessoas. Jurava que o framework de persistencia estava embutido na construção mas,
na hora de rodar não gera as tabelas no meu bd MySql…a IDE mostra um erro dizendo que falta fazer a persistencia de dados!
Alguém sabe como faço isso numa aplicação que já está semi pronta? Ou será melhor abandonar a persistencia via frameworks e criar as tabelas no banco manualmente ?
Detalhe: a conexão com MySql está funcionando normalmente…
Abraços e Obrigado… :roll:
fala bruce… cara o seguinte qual o frameWork de persistencia vc esta usando??
se estiver usando JPA vc pode escolher atraves de um arquivo de configurção qual o ORM vc quer usar
ex: Hibernate , toplink
no hibernate tem uma opção de crias as DDL do banco atraves de suas classes mapeadas
hibernate.hbm2ddl.auto=update
este comando cria ou atualiza as DDL do banco.
abrç!!
Dark Neo,
Obrigado pelas dicas eu estarei verificando e retorno.
:idea:
[b]Caro Dark Neo,
Revi a minha aplicação mas, não consegui saber qual o framework utilizado ou se há algum, existe algum procedimento que eu deva fazer para que a essa altura, com a aplicação semi-pronta a Ide me de essa informação? Desculpa a minha ignorancia, não conheço bem a Ide Netbeans…No código vi algumas Anotations e bens criados, as classes de entidade tb mas, não consegui ver qual a origem do problema. Há apenas um erro num trecho de código que reproduzo:[/b]
private class SaveTask extends Task {
SaveTask(org.jdesktop.application.Application app) {
super(app);
}
@Override protected Void doInBackground() {
try {
entityManager.getTransaction().commit();
entityManager.getTransaction().begin();
} catch (RollbackException rex) {
rex.printStackTrace();
entityManager.getTransaction().begin();
List<membrosdb.User> merged = new ArrayList<membrosdb.User>(list.size());
for (membrosdb.User u : list) {
merged.add(entityManager.merge(u));
}
list.clear();
list.addAll(merged);
}
return null;
}
O netbeans não consegue achar a “Application app” … 
[b]Caros, um pouco do código da aplicação MembrosDB que mostra uma interface para cadastro de usuários armazenados a partir de um Bd Mysql, rodando sob o Netbeans…
[/b]
[code]public class MembrosDBTESTE {
/*
* MembrosDBView.java
*/
import org.jdesktop.application.Action;
import org.jdesktop.application.ResourceMap;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import org.jdesktop.application.TaskMonitor;
import org.jdesktop.application.Task;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.RollbackException;
import javax.swing.Timer;
import javax.swing.Icon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import org.jdesktop.beansbinding.AbstractBindingListener;
import org.jdesktop.beansbinding.Binding;
import org.jdesktop.beansbinding.PropertyStateEvent;
/**
* The application's main frame.
*/
public class MembrosDBView extends FrameView {
public MembrosDBView(SingleFrameApplication app) {
super(app);
initComponents();
// status bar initialization - message timeout, idle icon and busy animation, etc
ResourceMap resourceMap = getResourceMap();
int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");
messageTimer = new Timer(messageTimeout, new ActionListener() {
public void actionPerformed(ActionEvent e) {
statusMessageLabel.setText("");
}
});
messageTimer.setRepeats(false);
int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");
for (int i = 0; i < busyIcons.length; i++) {
busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");
}
busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {
public void actionPerformed(ActionEvent e) {
busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
}
});
idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(false);
// connecting action tasks to status bar via TaskMonitor
TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());
taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
String propertyName = evt.getPropertyName();
if ("started".equals(propertyName)) {
if (!busyIconTimer.isRunning()) {
statusAnimationLabel.setIcon(busyIcons[0]);
busyIconIndex = 0;
busyIconTimer.start();
}
progressBar.setVisible(true);
progressBar.setIndeterminate(true);
} else if ("done".equals(propertyName)) {
busyIconTimer.stop();
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(false);
progressBar.setValue(0);
} else if ("message".equals(propertyName)) {
String text = (String)(evt.getNewValue());
statusMessageLabel.setText((text == null) ? "" : text);
messageTimer.restart();
} else if ("progress".equals(propertyName)) {
int value = (Integer)(evt.getNewValue());
progressBar.setVisible(true);
progressBar.setIndeterminate(false);
progressBar.setValue(value);
}
}
});
// tracking table selection
masterTable.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
firePropertyChange("recordSelected", !isRecordSelected(), isRecordSelected());
}
});
// tracking changes to save
bindingGroup.addBindingListener(new AbstractBindingListener() {
@Override
public void targetChanged(Binding binding, PropertyStateEvent event) {
// save action observes saveNeeded property
setSaveNeeded(true);
}
});
// have a transaction started
entityManager.getTransaction().begin();
}
public boolean isSaveNeeded() {
return saveNeeded;
}
private void setSaveNeeded(boolean saveNeeded) {
if (saveNeeded != this.saveNeeded) {
this.saveNeeded = saveNeeded;
firePropertyChange("saveNeeded", !saveNeeded, saveNeeded);
}
}
public boolean isRecordSelected() {
return masterTable.getSelectedRow() != -1;
}
@Action
public void newRecord() {
membrosdb.User u = new membrosdb.User();
entityManager.persist(u);
list.add(u);
int row = list.size()-1;
masterTable.setRowSelectionInterval(row, row);
masterTable.scrollRectToVisible(masterTable.getCellRect(row, 0, true));
setSaveNeeded(true);
}
@Action(enabledProperty = "recordSelected")
public void deleteRecord() {
int[] selected = masterTable.getSelectedRows();
List<membrosdb.User> toRemove = new ArrayList<membrosdb.User>(selected.length);
for (int idx=0; idx<selected.length; idx++) {
membrosdb.User u = list.get(masterTable.convertRowIndexToModel(selected[idx]));
toRemove.add(u);
entityManager.remove(u);
}
list.removeAll(toRemove);
setSaveNeeded(true);
}
@Action(enabledProperty = "saveNeeded")
public Task save() {
return new SaveTask(getApplication());
}
private class SaveTask extends Task {
SaveTask(org.jdesktop.application.Application app) {
super(app);
}
@Override protected Void doInBackground() {
try {
entityManager.getTransaction().commit();
entityManager.getTransaction().begin();
} catch (RollbackException rex) {
rex.printStackTrace();
entityManager.getTransaction().begin();
List><membrosdb.User> merged = new ArrayList<membrosdb.User>(list.size());
for (membrosdb.User u : list) {
merged.add(entityManager.merge(u));
}
list.clear();
list.addAll(merged);
}
return null;
}
@Override protected void finished() {
setSaveNeeded(false);
}
}
/**
* An example action method showing how to create asynchronous tasks
* (running on background) and how to show their progress. Note the
* artificial 'Thread.sleep' calls making the task long enough to see the
* progress visualization - remove the sleeps for real application.
*/
@Action
public Task refresh() {
return new RefreshTask(getApplication());
}
private class RefreshTask extends Task {
RefreshTask(org.jdesktop.application.Application app) {
super(app);
}
@SuppressWarnings("unchecked")
@Override protected Void doInBackground() {
try {
setProgress(0, 0, 4);
setMessage("Rolling back the current changes...");
setProgress(1, 0, 4);
entityManager.getTransaction().rollback();
Thread.sleep(1000L); // remove for real app
setProgress(2, 0, 4);
setMessage("Starting a new transaction...");
entityManager.getTransaction().begin();
Thread.sleep(500L); // remove for real app
setProgress(3, 0, 4);
setMessage("Fetching new data...");
java.util.Collection data = query.getResultList();
for (Object entity : data) {
entityManager.refresh(entity);
}
Thread.sleep(1300L); // remove for real app
setProgress(4, 0, 4);
Thread.sleep(150L); // remove for real app
list.clear();
list.addAll(data);
} catch(InterruptedException ignore) { }
return null;
}
@Override protected void finished() {
setMessage("Done.");
setSaveNeeded(false);
}
}
@Action
public void showAboutBox() {
if (aboutBox == null) {
JFrame mainFrame = MembrosDBApp.getApplication().getMainFrame();
aboutBox = new MembrosDBAboutBox(mainFrame);
aboutBox.setLocationRelativeTo(mainFrame);
}
MembrosDBApp.getApplication().show(aboutBox);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
bindingGroup = new org.jdesktop.beansbinding.BindingGroup();[/code]
[b]Problemas apareceram na chamada a Application app…se alguém ja enfrentou esse tipo de problemas no aprendizado
por favor deem uma luz pois, ficaria feliz em Ouvi-los…
Obs.: Suprimi o restante do código pois ficaria grande demais para postar junto com a listagem de componentes de interface utilizados + listagem de colunas a criar…
Abraços e Obrigado!
[/b] :roll: 
[b]Dark,
Devo criar a tabela na mão e após achar um framework que ele crie as entidades?
como resolver esse probleminha ai amigos?
abraço.[/b] :roll: