E aí, pessoal.
Tem como vocês me ajudarem com uma dúvida?
eu estava tendo um problema ao persistir uma entidade com chave composta.
@Entity
@Table(name = "SUBTIPO", schema = "SCHEMA")
@IdClass(TipoPK.class)
public class SubTipo implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = "SEQ_IDSUBTIPO", sequenceName = "SEQ_IDSUBTIPO", allocationSize = 1)
@GeneratedValue(generator = "SEQ_IDSUBTIPO", strategy = GenerationType.SEQUENCE)
@Column(name = "IDSUBTIPO", unique = true, nullable = false, precision = 22, scale = 0)
private Long id;
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "IDTIPO", referencedColumnName = "IDTIPO", nullable = false, insertable = false)
private Tipo tipo;
}
Ou seja… é um objeto SubTipo que tem um Tipo, só que esse Tipo faz parte da PK
os Tipos ja estão gravados no banco, eu puxo uma lista deles e seto o que eu quero no meu subtipo
o id eu envio como nulo e tento dar um persist()
mas é lançada a exceção org.hibernate.PersistentObjectException: detached entity passed to persist
eu li que essa exceção é lançada quando você envia um objeto Persisted pra um método que espera um Transient.
eu imagino que ele dê esse erro porque uso uma chave composta, e mesmo tendo meu id como null, o Tipo está setado com um objeto persistido
ou seja, minha PK esta “meia” preenchida hehehe…
usando essa lógica eu pensei em usar o merge… e funcionou…
Existe alguma maneira melhor de se fazer isso?