Oi pessoal,
Tudo que estou tentando fazer é setar o id do usuário (id da tabela/classe usuário) e o nick (username da tabela/classe usuario) da tabela/classe mensagem para um chat rudimentar que estou fazendo.
Preciso disso pois gravo numa tabela, e faço o frame de mensagens exibir o nº da mensagem, o usuario, para quem ele está enviando e a mensagem em si.
Segue meus códigos:
Mensagem.class:
package entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
@Entity
@Table
public class Mensagem {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private Integer idMensagem;
@Column(length = 25)
private String nick;
@Column(length = 25)
private String mensagem;
@Column(length = 25, columnDefinition = "default 'TODOS'")
private String para;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="id_usuario", insertable= true, updatable= true)
@Fetch(FetchMode.JOIN)
private Usuario usuario;
public Mensagem() {
}
public String toString() {
return idMensagem + "," + nick + "," + mensagem + "," + para;
}
public Integer getIdMensagem() {
return idMensagem;
}
public void setIdMensagem(Integer idMensagem) {
this.idMensagem = idMensagem;
}
public String getNick() {
return nick;
}
public void setNick(String nick) {
this.nick = nick;
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
public String getPara() {
return para;
}
public void setPara(String para) {
this.para = para;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
}
Usuario.class:
package entity;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
//import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table
public class Usuario {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column
private Integer idusuario;
@Column
private String nome;
@Column(unique=true)
private String username;
@Column
private String password;
@Column
private String authority;
@OneToMany(mappedBy="usuario",fetch=FetchType.LAZY)
private List<Mensagem> mensagem;
public Usuario() {
// TODO Auto-generated constructor stub
}
public Usuario(Integer idusuario, String nome, String username,
String password, String authority) {
this.idusuario = idusuario;
this.nome = nome;
this.username = username;
this.password = password;
this.authority = authority;
}
public Integer getIdusuario() {
return idusuario;
}
public void setIdusuario(Integer idusuario) {
this.idusuario = idusuario;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
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;
}
public String getAuthority() {
return authority;
}
public void setAuthority(String authority) {
this.authority = authority;
}
public List<Mensagem> getMensagem() {
return mensagem;
}
public void setMensagem(List<Mensagem> mensagem) {
this.mensagem = mensagem;
}
}
MensagemDao.class:
package persistence;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import entity.Mensagem;
import entity.Usuario;
public class MensagemDao {
Session session;
Transaction transaction;
Query query;
public void create(Mensagem m, Usuario u) throws Exception{
session = HibernateUtil.getSessionFactory().openSession();
transaction = session.beginTransaction();
session.save(m);
transaction.commit();
session.close();
}
@SuppressWarnings("unchecked")
public List <Mensagem> findAll() throws Exception{
session = HibernateUtil.getSessionFactory().openSession();
List <Mensagem> lista = session.createQuery("from Mensagem").list();
session.close();
return lista;
}
}
UsuarioDao.class
package persistence;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.hibernate.*;
import entity.Usuario;
public class UsuarioDao {
private HibernateTemplate hibernate;
public void setSessionFactory(SessionFactory sessionFactory){
hibernate = new HibernateTemplate(sessionFactory);
}//injeção de dependência
public void create(Usuario u) throws Exception{
Session session = hibernate.getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
session.save(u);
transaction.commit();
session.close();
}
}
ManagerBeanMensagem.class (o principal):
package manager;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import persistence.MensagemDao;
import entity.Mensagem;
public class ManagerBeanMensagem {
private Mensagem mensagem;
private List <Mensagem> listamensagem;
public List<Mensagem> getListamensagem() {
try{
listamensagem= new MensagemDao().findAll();
}catch(Exception e){
}
return listamensagem;
}
public void setListamensagem(List<Mensagem> listamensagem) {
this.listamensagem = listamensagem;
}
public ManagerBeanMensagem() {
mensagem = new Mensagem();
}
public Mensagem getMensagem() {
return mensagem;
}
public void setMensagem(Mensagem mensagem) {
this.mensagem = mensagem;
}
public void cadastro(){
FacesContext fc = FacesContext.getCurrentInstance();
try{
MensagemDao d = new MensagemDao();
d.create(mensagem, null);
mensagem = new Mensagem();
fc.addMessage("form1", new FacesMessage("Dados gravados"));
}
catch(Exception e){
fc.addMessage("form1", new FacesMessage(e.getMessage()));
}
}
}
E o MensageBean que uso para retornar o nome de usuário:
package manager;
import java.io.Serializable;
import javax.faces.bean.SessionScoped;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import entity.Usuario;
@SessionScoped
public class UsuarioController implements Serializable {
private static final long serialVersionUID = 1L;
private Usuario usuario;
public UsuarioController(){
usuario = new Usuario();
SecurityContext context = SecurityContextHolder.getContext();
if(context instanceof SecurityContext)
{
Authentication authentication = context.getAuthentication();
if(authentication instanceof Authentication)
{
usuario.setUsername(((User)authentication.getPrincipal()).getUsername());
}
}
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
/**public void pegaIdUsuario(){
usuario = new Usuario();
usuario.getIdusuario();
}**/
}
Por favor, se puderem me ajudar, eu agradeço imensamente!