Vou colocar aquia a estrutura completa , pois não estou conseguindo fazer funcionar , talvez tenha alguma coisa no modelo ou no dao que esteja com problema .
Dser.java
package model;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name = "DSER")
public class Dser {
@EmbeddedId
private DserPK id;
@Column(name = "DSERNOME")
private String dsernome;
@Column(name = "DSERSERIAL")
private Long dserserial;
@Column(name = "DSERDTALT")
@Temporal(TemporalType.TIMESTAMP)
private Date dserdtalt;
@Column(name = "DSERUSR")
private Short dserusr;
@Column(name = "DSERPAR1")
private Long dserpar1;
@Column(name = "DSERPAR2")
private Long dserpar2;
// @Max(value=?) @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
@Column(name = "DSERPAR3")
private BigDecimal dserpar3;
//@Size(max = 20)
@Column(name = "DSERPAR4")
private String dserpar4;
//@Size(max = 60)
@Column(name = "DSERHIS")
private String dserhis;
public void setDsernome(String dsernome) {
this.dsernome = dsernome;
}
public String getDsernome() {
return dsernome;
}
public void setDserserial(Long dserserial) {
this.dserserial = dserserial;
}
public Long getDserserial() {
return dserserial;
}
public void setDserdtalt(Date dserdtalt) {
this.dserdtalt = dserdtalt;
}
public Date getDserdtalt() {
return dserdtalt;
}
public void setDserusr(Short dserusr) {
this.dserusr = dserusr;
}
public Short getDserusr() {
return dserusr;
}
public void setDserpar1(Long dserpar1) {
this.dserpar1 = dserpar1;
}
public Long getDserpar1() {
return dserpar1;
}
public void setDserpar2(Long dserpar2) {
this.dserpar2 = dserpar2;
}
public Long getDserpar2() {
return dserpar2;
}
public void setDserpar3(BigDecimal dserpar3) {
this.dserpar3 = dserpar3;
}
public BigDecimal getDserpar3() {
return dserpar3;
}
public void setDserpar4(String dserpar4) {
this.dserpar4 = dserpar4;
}
public String getDserpar4() {
return dserpar4;
}
public void setDserhis(String dserhis) {
this.dserhis = dserhis;
}
public String getDserhis() {
return dserhis;
}
public void setId(DserPK id) {
this.id = id;
}
public DserPK getId() {
return id;
}
}
DserPK.java
package model;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
@Embeddable
public class DserPK implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Column
private short dserest;
@Column
private String dserpar;
public DserPK(){
}
public short getDserest() {
return dserest;
}
public void setDserest(short dserest) {
this.dserest = dserest;
}
public String getDserpar() {
return dserpar;
}
public void setDserpar(String dserpar) {
this.dserpar = dserpar;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + dserest;
result = prime * result + ((dserpar == null) ? 0 : dserpar.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
DserPK other = (DserPK) obj;
if (dserest != other.dserest)
return false;
if (dserpar == null) {
if (other.dserpar != null)
return false;
} else if (!dserpar.equals(other.dserpar))
return false;
return true;
}
}
DserRepository
package repository;
import java.util.Collection;
import model.Dser;
public interface DserRepository {
public Collection<Dser> loadAll();
public Dser loadByDserPK(Object id);
public void remove(Dser dser) ;
public Dser save(Dser dser) ;
}
DserDao
package dao;
import java.util.Collection;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import model.Dser;
import repository.DserRepository;
import br.com.caelum.vraptor.ioc.Component;
@Component
public class DserDao implements DserRepository{
private final EntityManager manager;
public DserDao(EntityManager manager){
this.manager = manager;
}
public Collection<Dser> loadAll() {
Query query = manager.createQuery("from Dser");
@SuppressWarnings("unchecked")
Collection<Dser> resultList = query.getResultList();
return resultList;
}
public Dser save(Dser dser) {
return manager.merge(dser);
}
public Dser loadByDser(Object id) {
return manager.find(Dser.class, id);
}
public Dser loadByDserPK(Object id) {
return manager.find(Dser.class, id);
}
public void remove(Dser dser) {
manager.remove(manager.getReference(Dser.class,dser.getId()));
}
}
DserController
package controller;
import java.util.Collection;
import model.Dser;
import model.DserPK;
import repository.DserRepository;
import br.com.caelum.vraptor.Delete;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.Validations;
@Resource
public class DserController {
private final DserRepository dserRepository;
private final Result result;
private final Validator validator;
public DserController(Validator validator,Result result, DserRepository dserRepository) {
this.validator = validator;
this.result = result;
this.dserRepository = dserRepository;
}
@Get("/dser/{dserpk.dserest}/{dserpk.dserpar}/editar")
public void editar(Dser dser) {
dser = dserRepository.loadByDserPK(dser.getId());
result.include("dser", dser).forwardTo(this).novo();
}
@Get("/dser/{dserpk.dserest}/{dserpk.dsernome}")
public void exibir(Dser dser) {
dser = dserRepository.loadByDserPK(dser.getId().getDserest());
result.include("dser", dser);
}
@Get("/dser")
public void listagem() {
Collection<Dser> dserList = dserRepository.loadAll();
result.include("dserList", dserList);
}
@Get("/dser/novo")
public void novo() {
}
@Delete("/dser/{dserpk.dserest}/{dserpk.dserpar}")
public void remover(Dser dser) {
dserRepository.remove(dser);
result
.include("message", "Serialização removida com sucesso")
.redirectTo(this).listagem();
}
@Post("/dser")
public void salvar(final Dser dser) {
validator.validate(dser);
validator.checking(new Validations(){{
//that(dser.getAgdnome().isEmpty() == false,"erro", "dser.agdnome.invalido","agdnome");
}});
validator.onErrorUsePageOf(this).novo();
dserRepository.save(dser);
result
.include("message", "Serialização salva com sucesso" )
.redirectTo(this).listagem();
}
}
listagem.jsp //É a pagina que contem uma lista da tabela Dser que tem um botão para a pagina listar , nesta página listagem esta funcionando ok , inclusive as 2 chaves
<head>
<title>Vraptor Agenda 2 | Serialização [listagem]</title>
</head>
<body>
<table class="table table-striped table-bordered table-condensed">
<thead>
<tr>
<th></th>
<th></th>
<th></th>
<th>Est</th>
<th>Parâmetro</th>
<th>Nome</th>
<th>Serial</th>
<th>Dt.Alt</th>
<th>Par1</th>
<th>Par2</th>
<th>Par3</th>
<th>Par4</th>
<th>Hist</th>
</tr>
</thead>
<tbody>
<c:forEach items="${dserList}" var="dser">
<tr>
<td>
<form
action="${pageContext.request.contextPath}/dser/${dser.id.dserest}/${dser.id.dserpar}/editar"
method="get">
<input type="submit" value="Editar" />
</form></td>
<td>
<form
action="${pageContext.request.contextPath}/dser/${dser.id.dserest}/${dser.id.dserpar}"
method="get">
<input type="submit" value="Exibir" />
</form></td>
<td>
<form
action="${pageContext.request.contextPath}/dser/${dser.id.dserest}/${dser.id.dserpar}/editar"
method="post">
<input type="submit" value="Excluir" />
</form></td>
<td>${dser.id.dserest}
<td>${dser.id.dserpar}</td>
<td>${dser.dsernome}</td>
<td>${dser.dserserial}</td>
<td>${dser.dserdtalt}</td>
<td>${dser.dserpar1}</td>
<td>${dser.dserpar2}</td>
<td>${dser.dserpar3}</td>
<td>${dser.dserpar4}</td>
<td>${dser.dserhis}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
Se alguém tiver paciência de ler todo código , talvez ache o erro estúpido que estou cometendo!!!