Java Hibernate:保存一个新的父级,其中包含子级,而无需编辑自动生成的bean和xml

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

我有一个从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;
    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;
    }

    [...]
}