Olá pessoal,
gostaria que me dessem umas dicas acerca de um programa que estou a implementar em Java. Sou um novato nestas andanças mas muita vontade de aprender.
Tenho uma classe EntityManagerUtil
public class EntityManagerUtil {
private static EntityManagerFactory ENTITY_MANAGER_FACTORY;
public static EntityManager getEntityManager() {
if (ENTITY_MANAGER_FACTORY == null) {
ENTITY_MANAGER_FACTORY = Persistence
.createEntityManagerFactory("Entity");
}
return ENTITY_MANAGER_FACTORY.createEntityManager();
}
}
Tenho uma classe Permissions
@Audited
@Entity
@Table(name = "PERMISSIONS")
public class Permissions implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "PERMISSION_ID", unique = true, nullable = false)
private long permissionId;
@Column(name = "PERMISSION_NAME", nullable = false, length = 25)
private String permissionName;
@Column(name = "PERMISSION_DESCRIPTION", nullable = true, length = 255)
private String permissionDescription;
@Column(name = "PERMISSION_ACTIVE", nullable = false, length = 1)
private Boolean permissionActive;
@ManyToMany(cascade = CascadeType.ALL, targetEntity = Roles.class, mappedBy = "rolePermissionList")
@ForeignKey(name = "FK_ROLES_PERMISSIONS")
private List<Roles> permissionRoleList = new ArrayList<Roles>();
public Permissions() {
}
public Permissions(long permissionId, String permissionName,
String permissionDescription, Boolean permissionActive,
List<Roles> permissionRoleList) {
super();
this.permissionId = permissionId;
this.permissionName = permissionName;
this.permissionDescription = permissionDescription;
this.permissionActive = permissionActive;
this.permissionRoleList = permissionRoleList;
}
public long getPermissionId() {
return this.permissionId;
}
public void setPermissionId(long permissionId) {
this.permissionId = permissionId;
}
public String getPermissionName() {
return this.permissionName;
}
public void setPermissionName(String permissionName) {
this.permissionName = permissionName;
}
public String getPermissionDescription() {
return this.permissionDescription;
}
public void setPermissionDescription(String permissionDescription) {
this.permissionDescription = permissionDescription;
}
public Boolean getPermissionActive() {
return this.permissionActive;
}
public void setPermissionActive(Boolean permissionActive) {
this.permissionActive = permissionActive;
}
public void setPermissionRoleList(List<Roles> permissionRoleList) {
this.permissionRoleList = permissionRoleList;
}
public List<Roles> getPermissionRoleList() {
return permissionRoleList;
}
}
Tenho uma classe GenericDAO
public class GenericDAO<T extends Serializable> {
private final Session session;
private final Class<T> persistentClass;
@SuppressWarnings("unchecked")
public GenericDAO() {
this.session = HibernateUtil.getSession();
this.persistentClass = (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
public Session getSession() {
return session;
}
private void closeSession() {
if (getSession() != null && getSession().isOpen()) {
getSession().close();
}
}
protected void save(T entity) {
try {
getSession().getTransaction().begin();
getSession().save(entity);
getSession().getTransaction().commit();
} catch (Throwable t) {
getSession().getTransaction().rollback();
t.printStackTrace();
} finally {
closeSession();
}
}
protected void update(T entity) {
try {
getSession().getTransaction().begin();
getSession().update(entity);
getSession().getTransaction().commit();
} catch (Throwable t) {
getSession().getTransaction().rollback();
t.printStackTrace();
} finally {
closeSession();
}
}
protected void delete(T entity) {
try {
getSession().getTransaction().begin();
getSession().delete(entity);
getSession().getTransaction().commit();
} catch (Throwable t) {
getSession().getTransaction().rollback();
t.printStackTrace();
} finally {
closeSession();
}
}
@SuppressWarnings("unchecked")
protected List<T> findAll() {
return getSession().createCriteria(persistentClass).list();
}
@SuppressWarnings("unchecked")
protected T findById(long id) {
return (T) getSession().createCriteria(persistentClass)
.add(Restrictions.idEq(id)).uniqueResult();
}
}
Tenho uma classe PermissionsDAO
public class PermissionsDAO extends GenericDAO<Permissions> {
protected void permissionSave(Permissions permission) {
save(permission);
}
protected void permissionUpdate(Permissions permission) {
update(permission);
}
protected void permissionDelete(long id) {
Permissions permission = (Permissions) findById(id);
delete(permission);
}
protected ArrayList<Object> getPermissionList() {
List<Permissions> permissionsList = findAll();
ArrayList<Object> outputList = new ArrayList<Object>();
for (Permissions permission : permissionsList) {
outputList.add(new Object[] {
permission.getPermissionName().toString(),
permission.getPermissionDescription().toString(),
permission.getPermissionActive(),
permission.getPermissionId() });
}
return outputList;
}
}
E tenho uma classe PermissionsController
public class PermissionsController {
public void save(String permissionName, String permissionDescription,
Boolean permissionActive) throws Exception {
Permissions permission = new Permissions();
permission.setPermissionName(permissionName);
permission.setPermissionDescription(permissionDescription);
permission.setPermissionActive(permissionActive);
new PermissionsDAO().permissionSave(permission);
}
public void update(long permissionId, String permissionName,
String permissionDescription, Boolean permissionActive)
throws Exception {
Permissions permission = new Permissions();
permission.setPermissionId(permissionId);
permission.setPermissionName(permissionName);
permission.setPermissionDescription(permissionDescription);
permission.setPermissionActive(permissionActive);
new PermissionsDAO().permissionUpdate(permission);
}
public void delete(long permissionId) throws Exception {
new PermissionsDAO().permissionDelete(permissionId);
}
public ArrayList<Object> permissionsList() {
return new PermissionsDAO().getPermissionList();
}
}
Estou a implementar uma aplicação MVC com recurso a Hibernate e estou a ter uns problemas na camada de apresentação.
A minha aplicação apresenta os dados inseridos na BD (MySQL) através de uma JTable ao utilizador.
Pretendo que o utilizador possa Adicionar, Editar e Apagar os dados da BD através de botões incluidos na Form.
Código da JTable
private List<Object> permissionsList = new PermissionsController()
.permissionsList();
... // JTable
final String[] columns = new String[] { "Permission name",
"Permission description", "Permission active" };
final boolean[] editableRows = { false, false, false };
TableModel tableModel = new CustomTableModel(permissionsList, columns,
editableRows);
customUIDataViewerPrimary.getTableDataViewerPrimary().setModel(
tableModel);
customUIDataViewerPrimary.getTableDataViewerPrimary().getColumnModel()
.getColumn(0).setCellRenderer(new CustomTableCellRenderer());
customUIDataViewerPrimary.getTableDataViewerPrimary().getColumnModel()
.getColumn(1).setCellRenderer(new CustomTableCellRenderer());
customUIDataViewerPrimary.getTableDataViewerPrimary().getColumnModel()
.getColumn(2)
.setCellRenderer(new CustomCheckBoxTableCellRenderer());
customUIDataViewerPrimary.getTableDataViewerPrimary().setHighlighters(
HighlighterFactory.createSimpleStriping());
...
/**
* Actions Example
*/
private void add() {
try {
permissionController.save(permissionName,
permissionDescription, permissionActive);
customTableModel.addRow(new Object[] { permissionName,
permissionDescription, permissionActive });
} catch (Exception e) {
e.printStackTrace();
}
}
Consigo fazer a apresentação dos dados ao utilizador sem problemas, sendo que o meu problema nisto tudo é que quando apago uma Permissão apago pelo valor permissionId, o mesmo quando edito e quando apago. Agora a questão é que na minha JTable só apresento as columas “Permission Name”, “Permission Description” e “Permission Active”, passo também para a lista que vai levar os valores para o TableModel a columa ID a qual está escondida (não atribuo nenhum cell renderer), para poder saber qual o ID da permissão a ser editada, ou apagada.
Em cima meti as classes que utilizo para criar o DAO, queria de saber se ao invés de utilizar a columa ID escondida para saber o ID da permissão seleccionada pelo utilizador poderia utilizar o Entity Manager para descobrir a Permissão seleccionada pelo utilizador?
Muito obrigado pela vossa atenção,
Abraço António Godinho