baymabruno 2 de mai. de 2012
Ele só entende como chave de ModeloAno o id e preciso que a fkModelo seja pk também
Segue o erro:
Exception in thread “ main ” org . hibernate . NonUniqueObjectException : a different object with the same identifier value was already associated with the session : [ br . com . baymabruno . modelo . ModeloAno # 1992 ]
at org . hibernate . event . def . AbstractSaveEventListener . performSave ( AbstractSaveEventListener . java : 191 )
at org . hibernate . event . def . AbstractSaveEventListener . saveWithGeneratedId ( AbstractSaveEventListener . java : 144 )
at org . hibernate . event . def . DefaultSaveOrUpdateEventListener . saveWithGeneratedOrRequestedId ( DefaultSaveOrUpdateEventListener . java : 210 )
at org . hibernate . event . def . DefaultSaveOrUpdateEventListener . entityIsTransient ( DefaultSaveOrUpdateEventListener . java : 195 )
at org . hibernate . event . def . DefaultSaveOrUpdateEventListener . performSaveOrUpdate ( DefaultSaveOrUpdateEventListener . java : 117 )
at org . hibernate . event . def . DefaultSaveOrUpdateEventListener . onSaveOrUpdate ( DefaultSaveOrUpdateEventListener . java : 93 )
at org . hibernate . impl . SessionImpl . fireSaveOrUpdate ( SessionImpl . java : 535 )
at org . hibernate . impl . SessionImpl . saveOrUpdate ( SessionImpl . java : 527 )
at org . hibernate . impl . SessionImpl . saveOrUpdate ( SessionImpl . java : 523 )
Flavio_Almeida 2 de mai. de 2012
baymabruno 3 de mai. de 2012
Solução!!!
Obrigado Flávio
A solução foi criar uma classe contendo as chaves da classe AnoModelo.
Segue as classes com a solução.
Modelo.class
import java.io.Serializable ;
import java.util.List ;
import javax.persistence.Entity ;
import javax.persistence.GeneratedValue ;
import javax.persistence.GenerationType ;
import javax.persistence.Id ;
import javax.persistence.JoinColumn ;
import javax.persistence.ManyToOne ;
import javax.persistence.OneToMany ;
import lombok.Getter ;
import lombok.Setter ;
@SuppressWarnings ( "serial" )
@Entity
public class Modelo implements Serializable {
@Id
@Getter
@Setter
@GeneratedValue ( strategy = GenerationType . IDENTITY )
private Integer idModelo ;
@Getter
@Setter
private String modelo ;
@Getter
@Setter
private String combustivel ;
@Getter
@Setter
private String codigoFipe ;
@OneToMany ( mappedBy = "modelo" , targetEntity = ModeloAno . class )
@Getter
@Setter
private List < ModeloAno > listModeloAno ;
@ManyToOne
@JoinColumn ( name = "fkMarca" , nullable = false )
@Getter
@Setter
private Marca marca ;
}
ModeloAno.class
import java.io.Serializable ;
import javax.persistence.EmbeddedId ;
import javax.persistence.Entity ;
import javax.persistence.JoinColumn ;
import javax.persistence.ManyToOne ;
import javax.persistence.Table ;
import lombok.Getter ;
import lombok.Setter ;
import br.com.baymabruno.modelo.id.ModeloAnoId ;
@Table ( name = "modelo_ano" )
@SuppressWarnings ( "serial" )
@Entity
public class ModeloAno implements Serializable {
@EmbeddedId
@Getter
private ModeloAnoId idModeloAno = new ModeloAnoId ();
@Getter
@Setter
private Integer preco ;
@ManyToOne
@JoinColumn ( name = "fkModelo" , referencedColumnName = "idModelo" , insertable = false , updatable = false )
@Getter
private Modelo modelo ;
public void setModelo ( Modelo modelo ){
this . modelo = modelo ;
this . idModeloAno . setFkModelo ( modelo . getIdModelo ());
}
}
ModeloAnoId.class
import java.io.Serializable ;
import javax.persistence.Embeddable ;
import javax.persistence.GeneratedValue ;
import javax.persistence.GenerationType ;
import org.hibernate.validator.NotNull ;
import lombok.Getter ;
import lombok.Setter ;
@SuppressWarnings ( "serial" )
@Embeddable
public class ModeloAnoId implements Serializable {
@Getter
@Setter
@GeneratedValue ( strategy = GenerationType . IDENTITY )
private Integer ano ;
@Getter
@Setter
@NotNull
private Integer fkModelo ;
@Override
public int hashCode () {
final int prime = 31 ;
int result = 1 ;
result = prime * result + (( ano == null ) ? 0 : ano . 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 ;
ModeloAnoId other = ( ModeloAnoId ) obj ;
if ( ano == null ) {
if ( other . ano != null )
return false ;
} else if ( ! ano . equals ( other . ano ))
return false ;
return true ;
}
}