Objekte nach Änderung(extern) aktualisieren

goodcat

Aktives Mitglied
Hi,

ich habe in meinem Programm eine Übersicht aller Kunden.
Mit diesem Code werden alle Kunden abgerufen.
Java:
@SuppressWarnings("unchecked")
	@Override
	public List<Customer> getCustomerList() {
		try {
			List<Customer> customerList = getSession().getNamedQuery("Customer.all").list();

			return customerList;
		}
		catch(HibernateException e) {
			e.printStackTrace();
		}
	}
Auf meiner GUI habe ich einen Button "aktualisieren" der diesen Code erneut ausführt und eine Liste aller Kunden holt, diese Daten werden in ein TableModel gepackt und der JTable übergeben.
Dieses Programm soll von mehreren Benutzern im Netzwerk genutzt werden d.h. jeder Benutzer kann Änderungen an den Kunden durchführen.
Das Problem das ich habe, wenn ich z.B. im MySQLWorkbench Änderungen an einem Kunden vornehme werden meine Objekte nicht aktualisiert.
Ich habe bereits mit session.clear() und mit session.close() versucht Hibernate zu veranlassen die Objekte zu aktualisieren... Allerdings ohne erfolg.

Hier noch meine Klassen:
Java:
public class DAO {
	
	@SuppressWarnings("rawtypes")
	private static final ThreadLocal session = new ThreadLocal();
	private static ConfigFile cfg = new ConfigFile();	
	private static SessionFactory sessionFactory = null;
	private static ServiceRegistry serviceRegistry;
	
	protected DAO() {
		if (sessionFactory == null) configureSessionFactory();
	}

	
	private static void configureSessionFactory() throws HibernateException {
	    Configuration configuration = new Configuration();
	    configuration.configure("src/hibernate.cfg.xml");
	    
	    serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();        
	    DAO.sessionFactory = configuration.buildSessionFactory(serviceRegistry);
	}
	
	@SuppressWarnings("unchecked")
	public static Session getSession() {
		Session session = (Session) DAO.session.get();
		if (session == null) {
			session = sessionFactory.openSession();
			DAO.session.set(session);
		}
		return session;
	}

	protected void begin() {
		getSession().beginTransaction();
	}

	protected void commit() {
		getSession().getTransaction().commit();
	}

	@SuppressWarnings("unchecked")
	protected void rollback() {
		try {
			getSession().getTransaction().rollback();
			getSession().close();
		} 
		catch (HibernateException e) {
			System.out.println(e.getMessage());
		}
		
		DAO.session.set(null);
	}

	@SuppressWarnings("unchecked")
	public static void close() {
		getSession().close();
		DAO.session.set(null);
	}
	
}

Java:
public class CustomerDAOImpl extends DAO implements CustomerDAO {

	@Override
	public Customer addCustomer(Customer customer) {
		try {
			begin();
			getSession().save(customer);
			commit();
			
			return customer;
		} 
		catch (HibernateException e) {
			rollback();
			e.printStackTrace();
		}
	}

	@Override
	public Customer updateCustomer(Customer customer) {
		try {
			begin();
			getSession().update(customer);
			commit();
			
			return customer;
		} 
		catch (HibernateException e) {
			rollback();
			e.printStackTrace();
		}
	}
		
	@Override
	public void deleteCustomer(Customer customer) {
		try {
			begin();
			getSession().delete(customer.getID());
			commit();
		} 
		catch (HibernateException e) {
			rollback();
			e.printStackTrace();
		}
	}

	@Override
	public Customer getCustomer(int id) {
		Customer customer = (Customer) getSession().get(Customer.class, id);
		return customer;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Customer> getCustomerList() {
		try {
			List<Customer> customerList = getSession().getNamedQuery("Customer.all").list();

			return customerList;
		}
		catch(HibernateException e) {
			e.printStackTrace();
		}
	}
}

Die CustomerDAOImpl.java instanziere ich im Model der GUI um auf die Daten zugreifen zu können.

Ich bin nicht besonders fit in Sachen Hibernate, vielleicht hat ja einer von euch eine Idee wie ich dieses Problem lösen könnte. Achso es gibt keine Server Applikation. Die User arbeiten direkt auf der MySQL Datenbank.

Vielen Dank,
goodcat
 
S

SlaterB

Gast
was genau heißt denn kein Erfolg?
kannst du aktuell nur den Stand von vorletzen Montag sehen, alle Änderungen die du zwischenzeitlich selbst mit Neuinstallation der Datenbank versucht hast bleiben unerkannt,
oder siehst du die neuen Daten wenn du das Programm neustartest oder was genau klappt, was nicht?

bist du dir sicher dass du die Änderungen in 'MySQLWorkbench' auch committest?

was meinst du mit
> session.clear() und mit session.close()
machst du nach dem close() eine neue Session auf und lädst du neue Daten und die sind dann weiter nicht aktuell?
 

goodcat

Aktives Mitglied
Hey Slater danke für deine Antwort.

was genau heißt denn kein Erfolg?
kannst du aktuell nur den Stand von vorletzen Montag sehen, alle Änderungen die du zwischenzeitlich selbst mit Neuinstallation der Datenbank versucht hast bleiben unerkannt,
oder siehst du die neuen Daten wenn du das Programm neustartest oder was genau klappt, was nicht?
Also ich starte das Programm und sehe alle Daten. Dann gehe ich bei geöffneten Programm in den Workbech und ändere einen Namen. Im Programm wird die Änderung nicht angezeigt. Erst wenn ich das Programm schließe und wieder öffne.

bist du dir sicher dass du die Änderungen in 'MySQLWorkbench' auch committest?
Änderungen wurden 100%ig comittet.

was meinst du mit
> session.clear() und mit session.close()
machst du nach dem close() eine neue Session auf und lädst du neue Daten und die sind dann weiter nicht aktuell?
Also ich benutze session.close() und rufe danach diesen Code auf um eine neue Session zu bekommen.
Die Daten sind danach immer noch nicht aktuell.
Java:
@SuppressWarnings("unchecked")
    public static Session getSession() {
        Session session = (Session) DAO.session.get();
        if (session == null) {
            session = sessionFactory.openSession();
            DAO.session.set(session);
        }
        return session;
    }

Ist es richtig das eine Session = eine offene DB Verbindung ist?
 
S

SlaterB

Gast
> Ist es richtig das eine Session = eine offene DB Verbindung ist?
richtig

> und rufe danach diesen Code auf
der gepostete Code macht ja gar nichts,
du musst dann auch die Daten neu abfragen und in der JTable neu anzeigen usw.,
wobei du diese Ebene erstmal ausblenden kannst, gib nur in den DB-Methoden die Daten mit System.out.println() aus,
das wäre schon Test genug



diese Antwort läßt umso mehr zweifeln, was du vorher mit
> werden meine Objekte nicht aktualisiert.
gemeint hast, automatisch passiert da wenig,
ich kann es nicht mit Gewissheit sagen, vermute aber dass du, falls du bei der ersten Session und der ersten Customer-Liste bleiben willst, schon selber manuell session.update() auf jedem Customer-Objekt in einer Schleife aufrufen musst,
auch dann erstmal nur mit System.out.println() checken,
auf die JTable müssen geänderte Objekte noch keine Auswirkungen haben, dort die Daten neu einfügen oder fireTableDataChanged() ausführen
 

goodcat

Aktives Mitglied
Also ich habe in meinem Model eine Methode die auf die CustomerDAOImpl Instanz zugreift und die Liste holt. Diese Methode packt dann alle Customer die in einer ArrayList liegen in ein TableModel und das wird mit .setModel(tableModel) in die JTable gepackt. Das funktioniert alles ohne Probleme. Ich bekomme in meiner JTable alle Kuden angezeigt.

Nur sobald ich was in der DB direkt ändere und den aktualisieren Knopf drücke werden die Kundenobjekte anscheinend nicht aktualisiert. Im Eclipse Debug Log wird auch eine SELECT Zeile ausgeworfen. Im MySQLWorkbench wird sobald ich den aktualisieren Knopf drücke Traffic erzeugt.

Ich wollte jetzt nicht die gesamt GUI (MVC) posten.

Java:
@SuppressWarnings("unchecked")
    @Override
    public List<Customer> getCustomerList() {
        try {
            List<Customer> customerList = getSession().getNamedQuery("Customer.all").list();
 
            return customerList;
        }
        catch(HibernateException e) {
            e.printStackTrace();
        }
    }
Dieser Code wird ausgeführt um an die Kundendaten zu kommen. Aber die Änderungen die ich an der DB gemacht habe sind dort nicht zu finden egal wie oft ich diese Methode ausführe. Wenn ich den Code in der DAO.java ändere sodass mir jedesmal eine komplett neue Session geöffnet wird dann funktioniert das aktualisieren der Objekte. Nur wird dann auch jedesmal eine neue Verbindung geöffnet und dann habe ich schnell 20 oder mehr Verbindungen auf und das ist nicht besonders schön.

ich kann es nicht mit Gewissheit sagen, vermute aber dass du, falls du bei der ersten Session und der ersten Customer-Liste bleiben willst, schon selber manuell session.update() auf jedem Customer-Objekt in einer Schleife aufrufen musst,

Aber dann werden doch für jeden Kunden eine Query generiert... Das ist doch ein extremer Overhead! (Es werden nicht nur Kunden verwaltet.. es noch viele andere Objekte die aktualisiert werden müssen)

Ich habe gedacht das mit session.clear() die Session geleert wird... Kann doch nicht sein das ich für jedes Objekt die session.update(obj) Mehtode ausführen muss...
 
Zuletzt bearbeitet:
S

SlaterB

Gast
die JTable wie gesagt besser raus lassen, aber wenn es mit neuer Session klappt dann kann man wohl einigermaßen vertrauen, dass dort alles stimmt,

session.clear() sollte etwas bewirken, ja,
ich kann jetzt nicht im Detail sagen ob sich das Hibernate-Log ändert,

andere Punkte sind:
- neue Customer-Objekte mit den alten mit == vergleichen, sind es dieselben? vor dem clear() bestimmt,
nach dem clear() sollten es neue sein,

- das update ruhig zumindest mal testen, reicht ja für das eine fragliche Objekt,
solange das nicht aktualisiert, hilft alles andere wie clear() garantiert nicht

- läuft auch keine Transaction? die muss geschlossen werden, sonst wird ja aktiv der alte Zustand festgehalten
(vergewissere dich nicht nur, dass du kein begin() in der Nähe hast, sondern schaue aktiv nach,
was session.getTransaction() zu dem Zeitpunkt gerade ist, ob aktiv usw.)

- teste es inwiefern neue Objekte in der Tabelle/ gelöschte alte, gar komplett gelöschte Tabelle registriert wird,
ist das auch nicht zu sehen oder klappt es und nur Veränderungen von Einträgen macht Probleme?


aus derartigen und ähnlichen Punkten, sicher überwiegend bekannt, kannst du dir letzte Tipps von mir zusammenbauen ;)
bzw. weiter im Detail nachschauen/ tesen, bis auf den Transaktions-Punkt, so unwahrscheinlich selbst der ist, habe ich nichts mehr direkt als Lösungsmöglichkeit anzumerken
 
Zuletzt bearbeitet von einem Moderator:

goodcat

Aktives Mitglied
Also habe jetzt folgendes getestet.

- neue Customer-Objekte mit den alten mit == vergleichen, sind es dieselben? vor dem clear() bestimmt, nach dem clear() sollten es neue sein,
Habe es mit folgender Methode probiert und bekomme immer ein false.
Java:
public List<Customer> getCustomerList() {
		
		try {
//			getSession().clear();
			
			customerListOLD = customerList;
			
			customerList = getSession().getNamedQuery("Customer.all").list();
						
			System.out.println(customerListOLD.get(0)==customerList.get(0));
			
			close();
		}		
		catch(Exception e) {
			e.printStackTrace();
		}
		
		return customerList;		
	}
Beim zweiten Aufruf der Methode sollte in customerListOLD die alte und in customerlist die neue sein. Bekomme immer ein false. Oder hab ich da was übersehen? clear hat nix daran geändert.

- das update ruhig zumindest mal testen, reicht ja für das eine fragliche Objekt,
solange das nicht aktualisiert, hilft alles andere wie clear() garantiert nicht
Java:
public List<Customer> getCustomerList() {
		List<Customer> customerList = new ArrayList<Customer>();
		try {
			customerList = getSession().getNamedQuery("Customer.all").list();
			getSession().update(customerList.get(0));
			System.out.println(customerList.get(0).toString());
			close();			
		}		
		catch(Exception e) {
			e.printStackTrace();
		}
		
		return customerList;		
	}
Methode abgeändert und ein Update auf ein geändertes (via SQLWorkbench) Objekt durchgeführt. Ändert sich nichts, Daten wurden nicht aktualisiert.

- läuft auch keine Transaction? die muss geschlossen werden, sonst wird ja aktiv der alte Zustand festgehalten
(vergewissere dich nicht nur, dass du kein begin() in der Nähe hast, sondern schaue aktiv nach,
was session.getTransaction() zu dem Zeitpunkt gerade ist, ob aktiv usw.)
Habe mit System.out.println(getSession().getTransaction().isActive()); geprüft ob vor dem abrufen eine Transaktion läuft... bekomme ein false.

- teste es inwiefern neue Objekte in der Tabelle/ gelöschte alte, gar komplett gelöschte Tabelle registriert wird,
ist das auch nicht zu sehen oder klappt es und nur Veränderungen von Einträgen macht Probleme?
Wenn ich ein Objekt aus der DB (via SQLWorkbench) lösche dann wird ebenfalls nichts aktualisiert. Das gelöschte Objekt wird trotzdem weiter angezeigt.

Habe zusätzlich eine Testklasse ohne JTable erstellt. Aber daran lag es nicht.
Es scheint doch alles nur an der Session zu liegen. Nur wieso funktioniert das clear nicht bzw. gibt es noch andere (vielleicht sogar bessere) Möglichkeiten die Objekte zu aktualisieren?
 
Zuletzt bearbeitet:
S

SlaterB

Gast
nicht dass ich wirklich noch weiter weiß, aber um einen Punkt klarzustellen:
im geposteten neuen Code getCustomerList() steht ein close(),
wenn für jeden Aufruf eine neue Session erstellt wird, ist klar dass immer neue Customer-Objekte erstellt werden und clear() keine Auswirkung hat,

allerdings sollte dann ja das zweite Customer-Objekt schon aktuell sein, dass es mit neuer Session klappt hast du ja gesagt?
ach ne, nur bei Neustart..,

-----------

ach und dann noch was, ohne wirklich ein Ziel zu haben, aber vielleicht magst du ja irgendwas hören ;) ,
wäre mein nächster Vorschlag, von deinem Code komplett wegzugehen und mal
Java:
  private static void listHoney() {
    Transaction tx = null;
    Session session = SessionFactoryUtil.getInstance().getCurrentSession();
    try {
      tx = session.beginTransaction();
      List honeys = session.createQuery(“select h from Honey as h”)
              .list();
      for (Iterator iter = honeys.iterator(); iter.hasNext();) {
        Honey element = (Honey) iter.next();
        logger.debug(“{}”, element);
      }
      tx.commit();
    } catch (RuntimeException e) {
      if (tx != null && tx.isActive()) {
        try {
// Second try catch as the rollback could fail as well
          tx.rollback();
        } catch (HibernateException e1) {
          logger.debug(“Error rolling back transaction”);
        }
// throw again the first exception
        throw e;
      }


    }
  }
aus
First Hibernate example - tutorial
auszuprobieren

umgeschrieben nur auf deine 'select alle Customer' in eine Methode, von main aus nur 2x mit 10 sec Pause dazwischen ausgeführt,
in der Zeit Änderung in anderem Programm, wie sieht es dann aus, kommt neuer Zustand?

auch close() ausprobieren, wobei ich nicht sagen kann wie sich das auf getCurrentSession() auswirkt,
vielleicht hilft es gerade, eine Transaction zu verwenden, auch wenn ich dazu ebenso nichts genaues sagen kann..


-------

und weiter fällt mir ein:
geht es in einem Programmablauf zumindest (ohne dass es eine akzeptable Situation wäre),
wenn du die SessionFactory irgendwie los wirst, gerne auch mit close(), und eine neue konfigurierst, von dort neue Session?
in der API sehe ich dort eine Methode getCache() mit Methode containsEntity(),
nachzuschauen kann ja nicht schaden
 
Zuletzt bearbeitet von einem Moderator:

goodcat

Aktives Mitglied
allerdings sollte dann ja das zweite Customer-Objekt schon aktuell sein, dass es mit neuer Session klappt hast du ja gesagt?
ach ne, nur bei Neustart..,
Ja das verstehe ich nicht. Die Daten sollten dann doch eigentlich aktuell sein!
Wenn ich die Methode die mir eine Session liefert umschreibe und jedesmal folgendes zurückgebe funktioniert es.
Java:
@SuppressWarnings("unchecked")
	public static Session getSession() {				
		return  sessionFactory.openSession();
	}
Allerdings habe ich dann jedesmal eine neue Verbindung. Was quatsch ist.
 
S

SlaterB

Gast
siehe auch meine Edits im letzen Posting zwischendurch,
als neuen Punkt kann ich noch weiter anmerken dass du vielleicht über verschiedene Threads nachdenken solltest,
ist es mal die main, mal der AWT-Event-Thread die dort vorbei kommen mit unterschiedlichen ThreadLocal-Sessions?

wobei ich darin keine Erklärung sehe, aber vielleicht erhellt das bei dir irgendwas
 

goodcat

Aktives Mitglied
siehe auch meine Edits im letzen Posting zwischendurch,
als neuen Punkt kann ich noch weiter anmerken dass du vielleicht über verschiedene Threads nachdenken solltest,
ist es mal die main, mal der AWT-Event-Thread die dort vorbei kommen mit unterschiedlichen ThreadLocal-Sessions?
Das aktualisieren soll in SwingWorker Thread passieren. Nur hab ich es bisher nicht hinbekommen das er einen Thread benutzt und nicht jedesmal einen neuen aufmacht... Dadurch hat er mir dann bei jedem refresh eine neue Verbindung aufgemacht was nicht so schön war.

So ich habe deinen geposteten Code probiert und der funktioniert.
Ich habe meinen Code verändert und jetzt geht es auch.

Java:
public List<Customer> getCustomerList() {
		List<Customer> customerList = new ArrayList<Customer>();
		try {
			begin();
			customerList = getSession().getNamedQuery("Customer.all").list();
			commit();
			close();			
		}		
		catch(Exception e) {
			e.printStackTrace();
		}
		
		return customerList;		
	}

Ich habe ein begin(); (was eine transaktion öffnet) und am Ende ein commit(); eingefügt.
Allerdings wird komischerweise erst wenn ich das zweite mal auf den refresh Button drücke die Daten aktualisiert was das ganze nutzlos macht :( ...

Wieso geht das denn mit dem begin und commit??? Und wieso erst beim zweiten refresh?? Ich versteh nur noch Bahnhof ???:L
 

goodcat

Aktives Mitglied
Also das Problem das ich immer 2x auf refresh klicken muss habe ich gefunden.
Und zwar liegt es an den ContactPerson die nach den Customern aktualisiert werden.
Wenn ich den Aufruf der Methoden vertausche klappt es. Nur warum das so ist kann ich absolut nicht nachvollziehen. Ich vermute mal es hat was mit den Mappings der ContactPersons in den Customern zu tun.

So funktioniert es... Vertausche ich den Aufruf klappt es erst beim zweiten Refresh der Daten.
Java:
setContactPersonTableModel( model.getContactPersonTableModel() );
setCustomerTableModel( model.getCustomerTableModel() );

Also in meiner View(Model) wird die CustomerDAOImpl und ContactPersonDAOImpl instanziert (Code der CustomerDAOImpl siehe mein ersten Post - ContactPersonDAOImpl. sieht fast genauso aus) und in der View wird dann via Observer Pattern oben stehender Code ausgeführt.

Ich poste hier mal 2 meiner Klassen. Vielleicht kann mir ja einer sagen ob die Mappings in Ordnung sind.
Die Listen im Customer habe ich gemacht um einmal alle Objekte die im Customer sind zu löschen (falls ein Customer gelöscht wird) und um auf die Childs des Customers zugreifen zu können. Also alle ContactPersons eines Customers etc.

Java:
@Entity( name = "tbl_customer" )
@NamedQuery( name = "Customer.all", query = "from src.DataObjects.Customer.Customer")
public class Customer {

	private int id;
	private int customerID;
	private String title;
	private String company;
	private String firstname;
	private String lastname;
	private String street;
	private String zipCode;
	private String city;
	private Country country;
	private String telephone;
	private String telefax;	
	private String email;
	private String website;
	private String notice;
	private Reviser reviser;
	
	private List<ContactPerson> contactPerson = new ArrayList<ContactPerson>();
	private List<Ticket> ticket = new ArrayList<Ticket>();
	private List<Device> device = new ArrayList<Device>();
	private List<License> license = new ArrayList<License>();
	private List<Password> password = new ArrayList<Password>();
	
	private boolean flag = false;
	
		
	public Customer() {
	}
	
	
	@Id	@GeneratedValue
	public int getID() {
		return id;
	}
	public void setID(int id) {
		this.id = id;
	}
	
	public int getCustomerID() {
		return customerID;
	}
	public void setCustomerID(int customerID) {
		this.customerID = customerID;
	}
	
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	
	public String getCompany() {
		return company;
	}
	public void setCompany(String company) {
		this.company = company;
	}
	
	public String getFirstName() {
		return firstname;
	}
	public void setFirstName(String firstname) {
		this.firstname = firstname;
	}
	
	public String getLastName() {
		return lastname;
	}
	public void setLastName(String lastname) {
		this.lastname = lastname;
	}	
	
	public String getStreet() {
		return street;
	}
	public void setStreet(String street) {
		this.street = street;
	}
	
	public String getZipCode() {
		return zipCode;
	}
	public void setZipCode(String zipCode) {
		this.zipCode = zipCode;
	}
	
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}	
	
	@OneToOne
	public Country getCountry() {
		return this.country;
	}
	public void setCountry(Country country) {
		this.country = country;
	}
	
	public String getTelephone() {
		return telephone;
	}
	public void setTelephone(String telephone) {
		this.telephone = telephone;
	}
	
	public String getTelefax() {
		return telefax;
	}
	public void setTelefax(String telefax) {
		this.telefax = telefax;
	}	
	
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
	public String getWebsite() {
		return website;
	}
	public void setWebsite(String website) {
		this.website = website;
	}	
	
	@Lob
	public String getNotice() {
		return notice;
	}
	public void setNotice(String notice) {
		this.notice = notice;	
	}

	@OneToOne
	public Reviser getReviser() {
		return reviser;
	}
	public void setReviser(Reviser reviser) {
		this.reviser = reviser;
	}
	
	@OneToMany( cascade = CascadeType.ALL, orphanRemoval=true )
	@JoinTable( name = "tbl_customer_contactPerson", joinColumns = @JoinColumn( name = "customer_id"), inverseJoinColumns = @JoinColumn( name = "contactperson_id") )
	public List<ContactPerson> getContactPerson() {
		return contactPerson;
	}
	public void setContactPerson(List<ContactPerson> contactPerson) {
		this.contactPerson = contactPerson;
	}
	
	@OneToMany( cascade = CascadeType.ALL, orphanRemoval=true )
	@JoinTable( name = "tbl_customer_ticket", joinColumns = @JoinColumn( name = "customer_id"), inverseJoinColumns = @JoinColumn( name = "ticket_id") )
	public List<Ticket> getTicket() {
		return ticket;
	}
	public void setTicket(List<Ticket> ticket) {
		this.ticket = ticket;
	}

	@OneToMany( cascade = CascadeType.ALL, orphanRemoval=true )
	@JoinTable( name = "tbl_customer_device", joinColumns = @JoinColumn( name = "customer_id"), inverseJoinColumns = @JoinColumn( name = "device_id") )
	public List<Device> getDevice() {
		return device;
	}
	public void setDevice(List<Device> device) {
		this.device = device;
	}
	
	@OneToMany( cascade = CascadeType.ALL, orphanRemoval=true )
	@JoinTable( name = "tbl_customer_license", joinColumns = @JoinColumn( name = "customer_id"), inverseJoinColumns = @JoinColumn( name = "license_id") )
	public List<License> getLicense() {
		return license;
	}
	public void setLicense(List<License> license) {
		this.license = license;
	}
	
	@OneToMany( cascade = CascadeType.ALL, orphanRemoval=true )
	@JoinTable( name = "tbl_customer_password", joinColumns = @JoinColumn( name = "customer_id"), inverseJoinColumns = @JoinColumn( name = "password_id") )
	public List<Password> getPassword() {
		return password;
	}
	public void setPassword(List<Password> password) {
		this.password = password;
	}

	@Transient
	public boolean isFlag() {
		return flag;
	}
	public void setFlag(boolean flag) {
		this.flag = flag;
	}
	
	public String toString() {		
		return this.company.isEmpty() ? this.lastname + ", " + this.firstname : this.company;				
	}

}
Java:
@Entity( name = "tbl_contactperson" )
@NamedQuery( name = "ContactPerson.all", query = "from src.DataObjects.ContactPerson.ContactPerson")
public class ContactPerson {

	private int id;
	private Customer customer;
	private Device device;
	private String title;
	private String firstname;
	private String lastname;
	private String street;
	private String zipCode;
	private String city;
	private Country country;
	private String phoneBusiness;
	private String phonePrivate;
	private String phoneMobile;
	private String email;
	private String username;
	private String password;
	private String notice;
	private ActivityStatus status;
	

	public ContactPerson() {		
	}
	
			
	@Id	@GeneratedValue	
	public int getID() {
		return id;
	}
	public void setID(int sqlID) {
		this.id = sqlID;
	}

	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}

	@OneToOne
	public Device getDevice() {
		return device;
	}
	public void setDevice(Device device) {
		this.device = device;
	}
	
	@ManyToOne
	public Customer getCustomer() {
		return customer;
	}
	public void setCustomer(Customer customer) {
		this.customer = customer;
	}	
	
	public String getFirstName() {
		return firstname;
	}
	public void setFirstName(String firstname) {
		this.firstname = firstname;
	}
	
	public String getLastName() {
		return lastname;
	}
	public void setLastName(String lastname) {
		this.lastname = lastname;
	}

	public String getStreet() {
		return street;
	}
	public void setStreet(String street) {
		this.street = street;
	}
	
	public String getZipCode() {
		return zipCode;
	}
	public void setZipCode(String zipCode) {
		this.zipCode = zipCode;
	}
	
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	
	@OneToOne
	public Country getCountry() {
		return country;
	}
	public void setCountry(Country country) {
		this.country = country;
	}
		
	public String getPhoneBusiness() {
		return phoneBusiness;
	}
	public void setPhoneBusiness(String phoneBusiness) {
		this.phoneBusiness = phoneBusiness;
	}
	
	public String getPhonePrivate() {
		return phonePrivate;
	}
	public void setPhonePrivate(String phonePrivate) {
		this.phonePrivate = phonePrivate;
	}	

	public String getPhoneMobile() {
		return phoneMobile;
	}
	public void setPhoneMobile(String phoneMobile) {
		this.phoneMobile = phoneMobile;
	}
	
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	@Lob
	public String getNotice() {
		return notice;
	}
	public void setNotice(String notice) {
		this.notice = notice;
	}

	@OneToOne
	public ActivityStatus getStatus() {
		return status;
	}
	public void setStatus(ActivityStatus status) {
		this.status = status;
	}

	public String toString() {		
		return this.firstname.isEmpty() ? this.lastname : this.lastname + ", " + this.firstname;				
	}

}

Vielen Dank,
goodcat
 

Ähnliche Java Themen


Oben