Announcement

Collapse
No announcement yet.

SQL in JPQL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL in JPQL

    Ich möchte folgendes SQL-Statement in JPQL umformen. Leider bekomme ich das nicht hin. Wäre prima, wenn mir jemand damit helfen könnte

    SQL: SELECT * FROM artikel JOIN artikel_artikelkategorie ON artikel.ARTIKELID = artikel_artikelkategorie.Artikel_ARTIKELID WHERE listeArtikelkategorie_ID = :subcatId AND aktiv = 1 GROUP BY artikel.ARTIKELID
    Den Befehl habe ich getestet und liefert das korrekte Ergebnis.

    In JPQL habe ich folgendes probiert:
    Query query = em.createQuery("SELECT a FROM Artikel a WHERE a.artikelkategorie.id = :subcatId", Artikel.class);


    Artikel.java
    Code:
    @Entity
    public class Artikel implements Serializable {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int artikelId;
        @ManyToOne
        private Partner partner;
        @OneToMany
        private List<Artikelkategorie> listeArtikelkategorie = new ArrayList<Artikelkategorie>();
        private String name;
    ...
    Artikelkategorie.java
    Code:
    @Entity
    public class Artikelkategorie implements Serializable {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int id;
        private String bezeichnung;
    ...

  • #2
    http://download.oracle.com/docs/cd/E...iew_query.html

    Siehe QueryParameter
    Christian

    Comment


    • #3
      Danke für die schnelle Antwort, leider verstehe ich es nicht. Ich habe kein Problem mit dem Parameter, sondern mit der gesamten JPQL-Abfrage. Ich weiß nicht wie ich die ArrayList über JPQL ansprechen kann?!

      Comment


      • #4
        a.artikelkategorie.id = :subcatId
        Wird so nicht gehen, subcatId hast du als Parameter dargestellt:

        createQuery("delete from Tabelle as t where t.id=?");
        query.setString(0,id);

        Um eine Liste einzubinden ist ein join zu nutzen:

        "left join fetch Artikelkategorie as cat"

        select distinct art from Artikel as art
        left join fetch Artikelkategorie as cat


        Das hantieren mit den IDs ist nicht erforderlich

        Mit @ManyToOne( fetch=FetchType.EAGER) wird die Liste bei Erstellung der Entity automatisch belegt
        Zuletzt editiert von Christian Marquardt; 13.08.2011, 15:03.
        Christian

        Comment

        Working...
        X