Spring Erweitern von Entities

Dieses Thema Spring - Erweitern von Entities im Forum "Application Tier" wurde erstellt von Marsman, 21. März 2014.

Thema: Erweitern von Entities Hallo Ihr! Ich hätte mal eine Frage zum Best Practice beim Erweitern von Persistente Entities im Zusammenhang mit...

  1. Hallo Ihr!

    Ich hätte mal eine Frage zum Best Practice beim Erweitern von Persistente Entities im Zusammenhang mit Spring MVC. Insbesondere bei einer Collection von Entities.

    Angenommen ich habe eine List<Image>, übergebe diese durch den Controller im Response (ModelAndView) an eine JSP. Dort wird diese Liste mit dem JSTL-Tag c:forEach ausgegeben. Soweit wie üblich. Nun soll je Bild noch eine URL ausgegeben werden, die sich aus Properties von Image und einer konfigurierten Basis-URL zusammensetzt. Diese möchte ich nicht auf der JSP (im View) zusammensetzen.

    Wie geht man nun am Besten vor? Spontan fällt mir ein, eine Wrapper-Klasse für Image zu erstellen, dort eine Methode getImageUrl() zu implementieren und im Controller List<Image> zu List<ImageWrapper> zu kopieren. Oder von Image zu erweitern. Dabei habe ich aber Probleme mit dem Persistence-Framework bekommen. Gibt es bessere Lösungen? Idealerweise Spring-konform. Wie wird so etwas in der Praxis realisiert?

    Code (Java):

    public class ImageWrapper {

      private Image image;

      @Autowired
      private SeoService seoService;

      public String getImageUrl() {
        return this.seoService.getImageUrl(image.getTitle());
      }
    }
     
    HTML:

    <c:forEach var="imageWrapper"> items="${imageWrappers}">
      <img src="${imageWrapper.imageUrl}" alt="${imageWrapper.image.title}" />
    </c:forEach>
     
    Danke, Thomas
     
  2. Vielleicht helfen dir diese Java-Grundlagen weiter --> *Klick*
  3. Schade, keine Antwort. War meine Frage zu blöd oder zu kompliziert?

    Im Grunde geht es mir darum, in meiner Web App eine Bean programmatisch zu instanziieren und in dieser Bean auf Services zugreifen zu können, die von Spring injected werden. Und falls möglich per Annotationen. Ich habe etwas über ApllicationContext und BeanFactory gelesen, komme da aber nicht richtig weiter.

    Gruß, Thomas
     
  4. stg
    stg
    Beim "normalen" JPA kannst du zusätzliche Attribute/Methoden mit der Annotation
    Code (Text):
    @Transient
    versehen, diese werden dann nicht persistiert und einfach "überlesen". Mit Spring gibt es bestimmt was Vergleichbares.
     
  5. ...das mit dem @Transient kenne ich. Ich möchte meine zusätzlichen Getter nicht in der Entity-Klasse selbst platzieren. Wenn ich von der Entity-Klasse erweitere (ImageWrapper extends Image), weiß ich nicht wie ich ImageWrapper instanziieren soll.

    Code (Java):

    public class ImageWrapper extends Image {

      @Autowired
      private SeoService seoService;
     
      @Transient
      public String getImageUrl() {
        return this.seoService.getImageUrl(image.getTitle());
      }
    }
     
    Gruß, Thomas
     
  6. Hallo nochmal,

    ich habe inzwischen selbst eine akzeptable Lösung gefunden. Mit einer Annotated Bean Factory und Beans im Prototype Scope.

    Gruß, Thomas
     
  7. KOSTENLOSES Java-Grundlagen Training im Wert von 39 € Sichere dir hier den kostenlosen Zugriff auf umfangreiches Java-Know How und starte richtig durch!