Znalazłam taki tutorial:
http://www.jaceklaskowski.pl/wiki/Tworzenie_aplikacji_desktopowej_z_Java_Desktop_Application_w_NetBeans_IDE_6.1
Moja aplikacja ma być praktycznie taka sama jak ta przedstawiona w tutorialu, więc wykonałam jego kolejne kroki. Mój problem polega na tym, że nie tworzą się tabele bazy danych (w zakładce Services w Databases jest wprawdzie moja baza danych, ale nie zawiera żadnych tabel).
W przykładzie autora są dwie tabele: Pacjent oraz Wizyta. U mnie zamiast nich są Zlecenie i Produkt.
Oto kod z którego ma się wygenerować tabela Zlecenie:
package model;
import java.io.Serializable;
import java.util.List;
public class Zlecenie implements Serializable {
private static final long serialVersionUID = 1L;
private String nazwa;
private String firma_zlecajaca;
private String wykonawca;
private Double wartosc_zlecenia;
private Integer liczba_dni_na_wykonanie_zlecenia;
private List<Produkt> produkty;
public Zlecenie(String nazwa, String firma_zlecajaca, Integer liczba_dni_na_wykonanie_zlecenia, String wykonawca, Double wartosc_zlecenia)
{
this.nazwa=nazwa;
this.firma_zlecajaca=firma_zlecajaca;
this.liczba_dni_na_wykonanie_zlecenia=liczba_dni_na_wykonanie_zlecenia;
this.wykonawca=wykonawca;
this.wartosc_zlecenia=wartosc_zlecenia;
}
public List<Produkt> getProdukty() {
return produkty;
}
public void setProdukty(List<Produkt> produkty) {
this.produkty = produkty;
}
public String getNazwa() {
return nazwa;
}
public void setNazwa(String nazwa) {
this.nazwa = nazwa;
}
public String getFirma_zlecajaca() {
return firma_zlecajaca;
}
public void setFirma_zlecajaca(String firma_zlecajaca) {
this.firma_zlecajaca = firma_zlecajaca;
}
public String getWykonawca() {
return wykonawca;
}
public void setWykonawca(String wykonawca) {
this.wykonawca = wykonawca;
}
public Double getWartosc_zlecenia() {
return wartosc_zlecenia;
}
public void setWartosc_zlecenie(Double wartosc_zlecenia) {
this.wartosc_zlecenia = wartosc_zlecenia;
}
public Integer getLiczba_dni_na_wykonanie_zlecenia() {
return liczba_dni_na_wykonanie_zlecenia;
}
public void setLiczba_dni_na_wykonanie_zlecenia(Integer liczba_dni_na_wykonanie_zlecenia) {
this.liczba_dni_na_wykonanie_zlecenia = liczba_dni_na_wykonanie_zlecenia;}
@Override
public int hashCode() {
int hash = 0;
hash += (nazwa != null ? nazwa.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Zlecenie)) {
return false;
}
Zlecenie other = (Zlecenie) object;
if ((this.nazwa == null && other.nazwa != null) || (this.nazwa != null && !this.nazwa.equals(other.nazwa))) {
return false;
}
return true;
}
@Override
public String toString() {
return "Zlecenie[id=" + nazwa + "]";
}
}
Zaznaczę przy tym, że nie wiem po co jest zapis: private static final long serialVersionUID = 1L;
Tak samo nie rozumiem przeznaczenia trzech ostatnich metod.
Produkt:
package model;
import java.io.Serializable;
import java.util.Date;
public class Produkt implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String nazwa;
private String kraj_produkcji;
private Date data_produkcji;
private Date data_waznosci;
private double waga_w_kg;
private Zlecenie zlecenie;
public Zlecenie getZlecenie() {
return zlecenie;
}
public void setZlecenie(Zlecenie zlecenie) {
this.zlecenie = zlecenie;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNazwa() {
return nazwa;
}
public void setNazwa(String nazwa) {
this.nazwa = nazwa;
}
public String getKraj_produkcji() {
return kraj_produkcji;
}
public void setKraj_produkcji(String kraj_produkcji) {
this.kraj_produkcji = kraj_produkcji;
}
public Date getData_produkcji() {
return data_produkcji;
}
public void setData_produkcji(Date data_produkcji) {
this.data_produkcji = data_produkcji;
}
public Date getData_waznosci() {
return data_waznosci;}
public void setData_waznosci(Date data_waznosci) {
this.data_waznosci = data_waznosci;
}
public double getWaga_w_kg() {
return waga_w_kg;
}
public void setWaga_w_kg(double waga_w_kg) {
this.waga_w_kg = waga_w_kg;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Produkt)) {
return false;
}
Produkt other = (Produkt) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "Produkt[id=" + id + "]";
}
}
Powyższe klasy wchodzą w skład projektu model.
3 poniżej zawierają się w projekcie generatortabel.
persistance.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="generatory-derbyPU" transaction-type="RESOURCE_LOCAL">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<class>model.Zlecenie</class>
<class>model.Produkt</class>
<properties>
<property name="toplink.jdbc.url" value="jdbc:derby:c:/temp/generatory-derby;create=true"/>
<property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<property name="toplink.ddl-generation" value="drop-and-create-tables"/>
</properties>
</persistence-unit>
</persistence>
orm.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
<description>Generatory</description>
<package>model</package>
<entity class="Zlecenie" name="Zlecenie" metadata-complete="false">
<description>Encja Zlecenie</description>
<named-query name="znajdzZleceniePoNazwie">
<query>SELECT p FROM Zlecenie p WHERE p.nazwa LIKE :nazwa</query>
</named-query>
<attributes>
<id name="nazwa" />
<one-to-many name="produkty" mapped-by="zlecenie">
<cascade>
<cascade-all />
</cascade>
</one-to-many>
</attributes>
</entity>
<entity class="Produkt" name="Produkt" metadata-complete="false">
<description>Encja Produkt</description>
<attributes>
<id name="id">
<generated-value generator="AUTO"/>
</id>
<basic name="data_waznosci">
<temporal>DATE</temporal>
</basic>
<many-to-one name="zlecenie" />
</attributes>
</entity>
</entity-mappings>
package generatortabel;
import model.Zlecenie;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class Generator {
public static void main(String[] args) {
new Generator().persist(new Zlecenie("Zakupy_listopadowe","Uwimex",10,"Sonex",55424.25)); //*****************
}
public void persist(Object object) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("generatory-derbyPU"); //*****************
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
try {
em.persist(object);
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
em.close();
}
}
}
Gdy chcę to skompilować wywala mi błędy przy linijkach oznaczonych gwiazdkami. Dlaczego? Przecież to praktycznie to samo co w tutorialu.
Jakby chciało się komuś to przeanalizować, to będę wdzięczna.
Pozdrawiam