e ai galera,
estou tendo um probleminha com @Version
model
@Entity
@Table(name = "pedirMusica")
@SequenceGenerator(name = "pedirMusica_id_seq", sequenceName = "pedirMusica_id_seq", allocationSize = 1)
public class PedirMusica implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pedirMusica_id_seq")
@Column(name = "id", nullable = false)
private Long id;
@Column(name = "descricaomusica", length = 20)
private String descricaoMusica;
@Column(name = "artistabanda", length = 20)
private String artistaBanda;
@Column(name = "descricaoouvinte", length = 40)
private String descricaoOuvinte;
@Column(name = "bairro", length = 30)
private String bairro;
//campos de controle
@Version
@Column(name = "versao")
private long versao;
@Column(name = "status")
private Boolean status;
@Column(name = "idusuario")
private Long idUsuario;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "dataregistro")
private Date dataRegistro;
@Column(name = "enderecoip", length = 20)
private String enderecoIp;
public PedirMusica() {
}
public String getArtistaBanda() {
return artistaBanda;
}
public void setArtistaBanda(String artistaBanda) {
this.artistaBanda = artistaBanda;
}
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getDescricaoMusica() {
return descricaoMusica;
}
public void setDescricaoMusica(String descricaoMusica) {
this.descricaoMusica = descricaoMusica;
}
public String getDescricaoOuvinte() {
return descricaoOuvinte;
}
public void setDescricaoOuvinte(String descricaoOuvinte) {
this.descricaoOuvinte = descricaoOuvinte;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Date getDataRegistro() {
return dataRegistro;
}
public void setDataRegistro(Date dataRegistro) {
this.dataRegistro = dataRegistro;
}
public String getEnderecoIp() {
return enderecoIp;
}
public void setEnderecoIp(String enderecoIp) {
this.enderecoIp = enderecoIp;
}
public Long getIdUsuario() {
return idUsuario;
}
public void setIdUsuario(Long idUsuario) {
this.idUsuario = idUsuario;
}
public Boolean getStatus() {
return status;
}
public void setStatus(Boolean status) {
this.status = status;
}
public long getVersao() {
return versao;
}
public void setVersao(long versao) {
this.versao = versao;
}
}
controller
@Resource
public class PedirMusicaController extends DefualtController {
private List<PedirMusica> pedirMusicaList = null;
private PedirMusicaBO pedirMusicabo = null;
public PedirMusicaController(Dao dao, Result result, CurrentUser user, Validator validator, HttpServletRequest request) {
this.dao = dao;
this.result = result;
this.currentUser = user;
this.validator = validator;
this.request = request;
this.pedirMusicabo = new PedirMusicaBO(dao);
}
@Get
@Path("/pedirMusica/detalhes/{pedirMusica.id}")
public PedirMusica detalhes(PedirMusica pedirMusica) {
return pedirMusicabo.procura(pedirMusica);
}
@Get
@Post
@Path(priority = 1, value = "/pedirMusica/formulario/")
public PedirMusica formulario() {
return null;
}
@Get
@Path(priority = 2, value = "/pedirMusica/formulario/{pedirMusica.id}")
public PedirMusica formulario(PedirMusica pedirMusica) {
return pedirMusica != null && pedirMusica.getId() > 0 ? (PedirMusica) pedirMusicabo.procura(pedirMusica) : null;
}
@Post
@Get
@Path("/pedirMusica/lista/")
public List<PedirMusica> lista(PedirMusica pedirMusica) throws Exception {
pedirMusicaList = pedirMusicabo.lista(pedirMusica);
result.include("pedirMusica", pedirMusica);
return pedirMusicaList;
}
@Path("/pedirMusica/remove/{pedirMusica.id}")
public void remove(PedirMusica pedirMusica) throws Exception {
try {
pedirMusicabo.remove(pedirMusicabo.procura(pedirMusica));
if (!validator.hasErrors()) {
success("Registro deletado com sucesso.");
result.redirectTo(PedirMusicaController.class).lista(null);
}
} catch (Exception e) {
error(e.getMessage());
}
validator.onErrorUse(Results.logic()).redirectTo(PedirMusicaController.class).lista(pedirMusica);
}
@Post
public void salva(PedirMusica pedirMusica) {
try {
setMacTime(pedirMusica);
pedirMusica = (PedirMusica) pedirMusicabo.armazena(pedirMusica);
} catch (Exception e) {
error(e.getMessage());
}
if (!validator.hasErrors()) {
success("Registro salvo com sucesso.");
result.include("pedirMusica", pedirMusica).redirectTo(this).detalhes(pedirMusica);
}
validator.onErrorUse(Results.logic()).redirectTo(PedirMusicaController.class).formulario(pedirMusica);
}
private void setMacTime(PedirMusica pedirMusica) {
if (pedirMusica.getId() == 0 || pedirMusica.getId() != 0) {
try {
pedirMusica.setIdUsuario(currentUser.getAdmin().getId());
pedirMusica.setEnderecoIp(InetAddress.getByName(request.getHeader("x-forwarded-for")).getHostAddress());
pedirMusica.setDataRegistro(new Date());
} catch (Exception ex) {
Logger.getLogger(PedirMusicaController.class.getName()).log(Level.SEVERE, null, ex);
error(ex.getMessage());
}
}
}
}
galera esta acontecendo o seguinte problema
quando eu salvo o registro a primeira vez o campo versao == 0,
quando eu coloco para editar o registro a primeira vez o campo versao == 1,
mas quando eu tento editar o registro novamente aparece a seguinte mensagem
[color=red]org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [br.com.radio.model.PedirMusica#156] [/color]
alguém pode me ajudar.