Вызов из Hibernate хранимой процедуры

 
0
 

Всем привет!
Требууется вызвать из Hibernate хранимку.
Зачем - ну потому что именно она должна сгенерить primary key
Ибо primary key строковый. Глупо но по другому никак.


@EntityListeners(Gnr.class)
public class EntGnrListener
{
    @Inject
    private GnrRepository gnrRepository;

    @PrePersist
    public void f01(Gnr gnr)
    {
        gnr.setGnrid(gnrRepository.f01());
    }
}



Вот маппиннг самой процедуры - БД Oracle 12g

[code=java]
@Procedure
    String f01();[code=java]


Маппинг объекта gnr

[code=java]
package de.kvwl.abrechnung.gostamm.transfer.model;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OrderColumn;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;

import com.qualinsight.plugins.sonarqube.smell.api.annotation.Smell;
import com.qualinsight.plugins.sonarqube.smell.api.annotation.Smells;
import com.qualinsight.plugins.sonarqube.smell.api.model.SmellType;

/**
* The persistent class for the GNR database table.
*
*/
@Entity
@Table(name = "GNR")
@NamedQuery(name = "Gnr.findAll", query = "SELECT g FROM Gnr g")
@Smells({
        @Smell(minutes = 5, reason = "This class should implement toString() using Apache ToStringBuilder (see commons-lang3)", type = SmellType.MISSING_IMPLEMENTATION),
        @Smell(minutes = 15, reason = "This class should implement hashCode() and equals() by using Apache Common libary (see commons-lang3)", type = SmellType.MISSING_IMPLEMENTATION) })
public class Gnr implements Serializable
{
    private static final long serialVersionUID = 1L;

    @Id
    [email protected](strategy = GenerationType.SEQUENCE, generator = "ID_SEQ_GNR")
    @SequenceGenerator(name = "ID_SEQ_GNR", sequenceName = "SEQ_GNR")
    @Column(columnDefinition = "CHAR(14)")
    @GenericGenerator(name = "STRING_SEQUENCE_GENERATOR", strategy = "de.kvwl.abrechnung.gostamm.transfer.model.StringSequenceGenerator", parameters = {
            @Parameter(name = "STRING_SEQUENCE_GENERATOR", value = "SEQ_GNR") })
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "STRING_SEQUENCE_GENERATOR")*/
    [email protected](strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "GNRID", unique = true, nullable = false)*/
    private String gnrid;

    public void setGnrid(String gnrid)
    {
        this.gnrid = gnrid;
    }

    public String getGnrid()
    {
        return this.gnrid;
    }

    private String alphateil;

    @Temporal(TemporalType.DATE)
    @Column(name = "EFF_TMR_BIS")
    private Date effTmrBis;

    @Temporal(TemporalType.DATE)
    @Column(name = "EFF_TMR_VON")
    private Date effTmrVon;

    private String erstesabrechnungsquartal;

    private String gebuehrennummer;

    @Temporal(TemporalType.DATE)
    @Column(name = "LETZTEAENDERUNG_VT")
    private Date letzteaenderungVt;

    private String letztesabrechnungsquartal;

    private int mandantnummer;

    private int nummer;

    private int updcount;

    //bi-directional many-to-one association to Leistung
    // @OneToMany(mappedBy = "gnr", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @OneToMany(mappedBy = "gnr", fetch = FetchType.LAZY, cascade = { CascadeType.MERGE, CascadeType.REFRESH })
    @PrimaryKeyJoinColumn
    @OrderColumn
    private List<Leistung> leistungs;

    public Gnr()
    {
    }

    public String getAlphateil()
    {
        return this.alphateil;
    }

    public void setAlphateil(String alphateil)
    {
        this.alphateil = alphateil;
    }

    public Date getEffTmrBis()
    {
        return this.effTmrBis;
    }

    public void setEffTmrBis(Date effTmrBis)
    {
        this.effTmrBis = effTmrBis;
    }

    public Date getEffTmrVon()
    {
        return this.effTmrVon;
    }

    public void setEffTmrVon(Date effTmrVon)
    {
        this.effTmrVon = effTmrVon;
    }

    public String getErstesabrechnungsquartal()
    {
        return this.erstesabrechnungsquartal;
    }

    public void setErstesabrechnungsquartal(String erstesabrechnungsquartal)
    {
        this.erstesabrechnungsquartal = erstesabrechnungsquartal;
    }

    public String getGebuehrennummer()
    {
        return this.gebuehrennummer;
    }

    public void setGebuehrennummer(String gebuehrennummer)
    {
        this.gebuehrennummer = gebuehrennummer;
    }

    public Date getLetzteaenderungVt()
    {
        return this.letzteaenderungVt;
    }

    public void setLetzteaenderungVt(Date letzteaenderungVt)
    {
        this.letzteaenderungVt = letzteaenderungVt;
    }

    public String getLetztesabrechnungsquartal()
    {
        return this.letztesabrechnungsquartal;
    }

    public void setLetztesabrechnungsquartal(String letztesabrechnungsquartal)
    {
        this.letztesabrechnungsquartal = letztesabrechnungsquartal;
    }

    public int getMandantnummer()
    {
        return this.mandantnummer;
    }

    public void setMandantnummer(int mandantnummer)
    {
        this.mandantnummer = mandantnummer;
    }

    public int getNummer()
    {
        return this.nummer;
    }

    public void setNummer(int nummer)
    {
        this.nummer = nummer;
    }

    public int getUpdcount()
    {
        return this.updcount;
    }

    public void setUpdcount(int updcount)
    {
        this.updcount = updcount;
    }

    public List<Leistung> getLeistungs()
    {
        return this.leistungs;
    }

    public void setLeistungs(List<Leistung> leistungs)
    {
        this.leistungs = leistungs;
    }

    public Leistung addLeistung(Leistung leistung)
    {
        getLeistungs().add(leistung);
        leistung.setGnr(this);

        return leistung;
    }

    public Leistung removeLeistung(Leistung leistung)
    {
        getLeistungs().remove(leistung);
        leistung.setGnr(null);
        return leistung;
    }

    @Override
    public String toString()
    {
        return ReflectionToStringBuilder.toStringExclude(this, "leistungs");
    }

    @Override
    public int hashCode()
    {
        return new HashCodeBuilder(17, 37).append(this.nummer).append(this.gebuehrennummer).toHashCode();
    }

    [email protected](procedureName = "f01")
    public String f01()
    {
    
    }*/
}



Ошибкаа в сущности та же как я пытлася решить вопрос и без вызова хранимки - последовательность не найдена.

Но в данном случае я хочу как раз именно хранимкой заменить секвенс.

Что делаю не так что не выполняется хранимка. Там стоит точка останова по вызову в prepersist но не работает.

Код ошибки
ORA-02289
испольщую Spring Boot


[/code]
[/code]
[/code]

задан 16:08, 28.10.2016
ava 

Ответы (0)
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить