-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Mapping mit SQL-MAX-Funktion
PostPosted: Fri Apr 04, 2008 8:34 am 
Newbie

Joined: Fri Apr 04, 2008 7:36 am
Posts: 1
Location: Duisburg, Germany
Hallo!

Ich habe eine Tabelle BW_USER mit RecId, Vorname etc. diese wird auch sehr schön auf meine Java-Klasse User gemappt.
Nun möchte ich jedoch zusätzlich (lesend) auf eine Information aus der Tabelle BW_LogTable zugreifen, in der protokolliert wird, wann sich ein User angemeldet hat.

Zur Zeit arbeite ich mit dieser 'Lösung' (Codeausschnitt):
Code:
@Entity
@javax.persistence.Table(name = "BW_USER")
public class User implements java.io.Serializable {
  private Integer             m_nRecId;
  private String              m_sLastName;

  public String getLastName() {
    return m_sLastName;
  }


  public void setLastName(String _sLastName) {
    m_sLastName = _sLastName;
  }

  @Transient
  public Timestamp getLastLogin() {
    EntityManager em = BicoreConst.createBicoreadminEntityManager();
    try {
      // Diese Query-Variante nur zur Demonstration, wie die Tabellen zusammenhängen:
      //Query q = em.createNativeQuery("SELECT MAX(BW_LogTable.LogDate) as LastLogin " + //
      //                               "  FROM BW_LogTable RIGHT OUTER JOIN " + //
      //                               "       BW_USER ON BW_LogTable.LogUser = BW_USER.RECID " + //
      //                               "  WHERE (BW_LogTable.LogTask = 'LOGIN') AND (BW_USER.RECID = ?)" + //
      //                               "  GROUP BY BW_USER.RECID");
      Query q = em.createNativeQuery("SELECT MAX(BW_LogTable.LogDate) as LastLogin "
              "  FROM BW_LogTable "
              "  WHERE (LogTask = 'LOGIN') AND (LogUser = ?)");
      q.setParameter(1, this.getRecid());
      try {
        Timestamp date = (Timestamp)q.getSingleResult();
        return date;
      } catch (javax.persistence.NoResultException e) {
        return null;
      }
    } finally {
      em.close();
    }
  }
}


Ich suche jedoch eine Lösung, bei der der letzte Loginzeitpunkt - so wie bei LastName - in einer Member-Variable der Klasse User gespeichert wird.

Für jeden Tipp dankbar

Holger Schulz


Top
 Profile  
 
 Post subject:
PostPosted: Fri Apr 04, 2008 10:37 am 
Expert
Expert

Joined: Thu Jul 05, 2007 9:38 am
Posts: 287
das müsste mit der Formula Annotation gehen. Ich weiß nicht ob du da ein komplettes subselect reinschreiben kannst, wenn nicht könntest du dir eine PLSQL Funktion schreiben die dir das gewünschte Ergebnis liefern und diese in der Formula Annotation verwenden.

_________________
Please rate useful posts.


Schauderhaft: Softwaredevelopment, Projectmanagement, Qualitymanagement and all things "schauderhaft"


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.