java - Hibernate:保存一个新的父级和子级,无需编辑自动生成的 bean 和 xml

标签 java xml hibernate

我有一个从数据库自动生成的 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;
    }

}

我想添加一个新的 Richiesta 和他的 child ,但是使用我编写的代码,我只能在表 Richiesta 中添加一个新行:

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();

我希望在 Anagrafica 表中添加一个新行,在 RichestaApplicazione 表中添加“N”条新闻行。

@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;
    }

    [...]
}

我阅读了将 CASCADE 属性添加到 xml/annotation 中,是否可以在不编辑 annotation/xml 的情况下实现它?例如在代码中添加一些内容。

最佳答案

要成为持久化实体,必须使用 session.persist(newEntity)session.save(newEntity) 将新实体实例添加到持久化上下文中。除了 ric 之外,您还没有对任何其他对象调用此方法。因此所有其他创建的实体仍然不是持久的。

关于java - Hibernate:保存一个新的父级和子级,无需编辑自动生成的 bean 和 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21625744/

相关文章:

xml - Excel XML 数据提要使行数据脱节

java - 如何编写 JpaRepository 方法来搜索在 Set<String> 中存储电话号码的用户

java - H2 序列在列中生成负数 [JPA Spring]

使用二维数组的 Java 控制台输出

java - 如何从 EditText 中删除文本

android - 以编程方式删除弹出菜单项

ios - 如何添加到 XML 文件的链接?

java - Primefaces 扩展 CK 编辑器始终呈现为文本区域

java - 无法读取 Maven 属性

java - 如何在Java中不创建连接类的情况下解决多对多关系?