Objekt, který ukládám do DB (+ dědění od základního BASEOBJECT):
package org.donutek.domain;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Transient;
@MappedSuperclass
public class BaseObject {
private Long id;
@Transient
public boolean isNew() {
return id == null;
}
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package org.donutek.domain;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@Table(name = "info_message")
public class info_message extends BaseObject implements Serializable {
private String date, message;
public info_message() {
}
public info_message(String date, String message) {
this.date = date;
this.message = message;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String toString() {
return "info_message{" + "date=" + date + ", message=" + message + '}';
}
}
Konkrétní uložení: public void save_info_message(info_message info_message) {
EntityManager em;
em = emf.createEntityManager();
info_messageDao.startTransaction(em);
try {
info_messageDao.save(info_message, em);
} catch (Exception e) {
info_messageDao.rollbackTransaction(em);
}
info_messageDao.commitTransaction(em);
em.close();
}
Kdy emf vytvářím při startu serveru takhle:emf = Persistence.createEntityManagerFactory("neco");
Generické DAO (v interfacu jsou jen hlavičky metod):package org.donutek.dao;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.donutek.domain.BaseObject;
public class GenericDaoJpa<T extends BaseObject> implements GenericDao<T> {
protected EntityManagerFactory emf;
private Class<T> persistedType;
public GenericDaoJpa(EntityManagerFactory emf, Class<T> persistedType) {
this.emf = emf;
this.persistedType = persistedType;
}
@Override
public T save(T value, EntityManager em) {
if (value.isNew()) {
em.persist(value);
return value;
} else {
return em.merge(value);
}
}
@Override
public void remove(T toRemove, EntityManager em) {
if (!toRemove.isNew()) {
em.remove(toRemove);
}
}
@Override
public void startTransaction(EntityManager em) {
em.getTransaction().begin();
}
@Override
public void commitTransaction(EntityManager em) {
em.getTransaction().commit();
}
@Override
public void rollbackTransaction(EntityManager em) {
em.getTransaction().rollback();
}
}
Konkrétní DAO objektu se kterým pracuji dědí od generického:package org.donutek.dao;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.TypedQuery;
import org.donutek.domain.info_message;
public class info_messageDaoJpa extends GenericDaoJpa<info_message> implements info_messageDao {
public info_messageDaoJpa(EntityManagerFactory emf) {
super(emf, info_message.class);
}
@Override
public info_message findLastMessage(EntityManager em) {
TypedQuery<info_message> q = em.createQuery("SELECT t FROM info_message t ORDER BY t.id DESC", info_message.class);
q.setMaxResults(1);
try {
return q.getSingleResult();
} catch (NoResultException e) {
return null;
}
}
}
Konkrétní výběr který posílám pak v REQUESTU je: EntityManager em;
em = emf.createEntityManager();
String date = daoRegister.getInfo_messageDao().findLastMessage(em).getDate(); //pristup do dao objektu
em.close();
emf je pořád stejný objekt, který posílám tam kde je třeba.