Java Hibernate:保存一个新的父级,其中包含子级,而无需编辑自动生成的bean和xml
我有一个从DB自动生成的bean:Java Hibernate:保存一个新的父级,其中包含子级,而无需编辑自动生成的bean和xml,java,xml,hibernate,Java,Xml,Hibernate,我有一个从DB自动生成的bean: @Entity @Table(name = "richiesta", catalog = "gestione_utenza") public class Richiesta implements java.io.Serializable { private Integer idRichiesta; private MessaggiErrore messaggiErrore; private Stato stato; priva
@Entity
@Table(name = "richiesta", catalog = "gestione_utenza")
public class Richiesta implements java.io.Serializable {
private Integer idRichiesta;
private MessaggiErrore messaggiErrore;
private Stato stato;
private Date dataInserimento;
private Date dataElaborazione;
private String nota;
private String usernameAssegnato;
private String utenteAutorizzante;
private String urlattivazione;
private Anagrafica anagrafica;
private Set<RichiestaApplicazione> richiestaApplicaziones = new HashSet<RichiestaApplicazione>(
0);
public Richiesta() {
}
public Richiesta(Stato stato, Date dataInserimento) {
this.stato = stato;
this.dataInserimento = dataInserimento;
}
public Richiesta(MessaggiErrore messaggiErrore, Stato stato,
Date dataInserimento, Date dataElaborazione, String nota,
String usernameAssegnato, String utenteAutorizzante,
String urlattivazione, Anagrafica anagrafica,
Set<RichiestaApplicazione> richiestaApplicaziones) {
this.messaggiErrore = messaggiErrore;
this.stato = stato;
this.dataInserimento = dataInserimento;
this.dataElaborazione = dataElaborazione;
this.nota = nota;
this.usernameAssegnato = usernameAssegnato;
this.utenteAutorizzante = utenteAutorizzante;
this.urlattivazione = urlattivazione;
this.anagrafica = anagrafica;
this.richiestaApplicaziones = richiestaApplicaziones;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "idRichiesta", unique = true, nullable = false)
public Integer getIdRichiesta() {
return this.idRichiesta;
}
public void setIdRichiesta(Integer idRichiesta) {
this.idRichiesta = idRichiesta;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "codiceErrore")
public MessaggiErrore getMessaggiErrore() {
return this.messaggiErrore;
}
public void setMessaggiErrore(MessaggiErrore messaggiErrore) {
this.messaggiErrore = messaggiErrore;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "stato", nullable = false)
public Stato getStato() {
return this.stato;
}
public void setStato(Stato stato) {
this.stato = stato;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "dataInserimento", nullable = false, length = 19)
public Date getDataInserimento() {
return this.dataInserimento;
}
public void setDataInserimento(Date dataInserimento) {
this.dataInserimento = dataInserimento;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "dataElaborazione", length = 19)
public Date getDataElaborazione() {
return this.dataElaborazione;
}
public void setDataElaborazione(Date dataElaborazione) {
this.dataElaborazione = dataElaborazione;
}
@Column(name = "nota", length = 256)
public String getNota() {
return this.nota;
}
public void setNota(String nota) {
this.nota = nota;
}
@Column(name = "usernameAssegnato", length = 20)
public String getUsernameAssegnato() {
return this.usernameAssegnato;
}
public void setUsernameAssegnato(String usernameAssegnato) {
this.usernameAssegnato = usernameAssegnato;
}
@Column(name = "utenteAutorizzante", length = 20)
public String getUtenteAutorizzante() {
return this.utenteAutorizzante;
}
public void setUtenteAutorizzante(String utenteAutorizzante) {
this.utenteAutorizzante = utenteAutorizzante;
}
@Column(name = "URLattivazione", length = 80)
public String getUrlattivazione() {
return this.urlattivazione;
}
public void setUrlattivazione(String urlattivazione) {
this.urlattivazione = urlattivazione;
}
@OneToOne(fetch = FetchType.LAZY, mappedBy = "richiesta")
public Anagrafica getAnagrafica() {
return this.anagrafica;
}
public void setAnagrafica(Anagrafica anagrafica) {
this.anagrafica = anagrafica;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "richiesta")
public Set<RichiestaApplicazione> getRichiestaApplicaziones() {
return this.richiestaApplicaziones;
}
public void setRichiestaApplicaziones(
Set<RichiestaApplicazione> richiestaApplicaziones) {
this.richiestaApplicaziones = richiestaApplicaziones;
}
}
我阅读了将CASCADE属性添加到xml/annotation中的步骤,是否可以在不编辑annotation/xml的情况下实现它?例如,在代码中添加某些内容。要成为持久性,必须使用
session.persist(newEntity)
或session.save(newEntity)
将新实体实例添加到持久性上下文中。除了ric
之外,您没有对任何对象调用此方法。因此,所有其他创建的实体仍然不是持久的。我称之为:session.save(ric);这让里克得救了。但不是所有其他的实体。但是如果我像我一样把对象Anagrafica放在里面,为什么两者都不保存呢?ric.setAnagrafica(新Anagrafica(uf、qu、ric、getCognomeVDR()、getNomeVDR()、getDataNascitaVDR()、getelefonovdr()、getEmailVDR()、getIpVDR());因为这不是它是如何工作的,它是如何设计的,以及JPA规范是如何指定它的。要么添加允许这样做的级联,要么显式调用save()
。如果我希望自动生成的bean具有“级联”规范,我需要设置一个特定的reveng.xml吗?对吗?
Richiesta ric = new Richiesta();
Stato st = new Stato();
st.setIdStato(1);
ric.setStato(st);
ric.setDataInserimento(new Date());
Integer[] appId = getApplicazioniSelezionateDefault();
for (int k=0; k<appId.length; k++)
{
Applicazione ap = new Applicazione();
ap.setIdApplicazione(appId[k]);
ric.getRichiestaApplicaziones().add( new RichiestaApplicazione( ap, ric));
}
Ufficio uf = new Ufficio();
uf.setIdufficio(this.getUfficioVDR());
Qualifica qu = new Qualifica();
qu.setIdQualifica( CommonUtil.getIndexInteger(getQualificaSelezionataVDR()) );
ric.setAnagrafica(new Anagrafica(uf, qu, ric, getCognomeVDR(), getNomeVDR(), getDataNascitaVDR(), getTelefonoVDR(), getEmailVDR(), getIpVDR()));
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.save(ric);
session.getTransaction().commit();
@Entity
@Table(name = "anagrafica", catalog = "gestione_utenza")
public class Anagrafica implements java.io.Serializable {
private Integer idRichiesta;
private Ufficio ufficio;
private Qualifica qualifica;
private Richiesta richiesta;
private String cognome;
private String nome;
private Date dataNascita;
private String telefono;
private String email;
private String ip;
[...]
@GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "richiesta"))
@Id
@GeneratedValue(generator = "generator")
@Column(name = "idRichiesta", unique = true, nullable = false)
public Integer getIdRichiesta() {
return this.idRichiesta;
}
[...]
}