Interface als EJB Entity

-AbeAdapti-

Mitglied
Hi,
hab mir mal tiefergehende Gedanken zu der EJB detached Entities gemacht. Normalerweise sind es Klassen, die aus der Session zurückgegeben werden.

Code:
@Entity
@Table(name = "tableName")
public class TestBean extends PersistenceBean<TestPK> {
    ....

Was aber wenn ich über eine Remote SessionFacade diese rausgeben will, da geb ich normalerweise nur Interfaces zurück. Ein Converter, welcher zwischen diesen vermitteln würde, ist bei großen Datenmengen zu aufwendig und eigentlich obsolet geworden.

Code:
@Entity
@Table(name = "tableName")
public interface ITestBean extends PersistenceBean<ITestPK> {
    ....
Bin ich da auf dem richtigen Weg?
 
Das sieht komisch aus. Mir ist neu, dass JPA Interfaces persistieren kann. Zumanderen kann ja PersistenceBean nur entweder Interface sein (zweiter Codeschnipsel) oder Klasse (erster Codeschnipsel). Lass doch einfach deine Entity ITestBean implementieren. das reicht doch völlig. Deine eigentlich Entity ist dann eine Implementierung des Interfaces mithilfe von JPA.

Gruß
Ollie
 
Das ist verstehe ich aber ich möchte den Converter umgehen, damit man nicht ständig zwischen Bean und Interface konvertieren muss, wenn man die Objekte herausgibt.

Entity
Code:
@Entity
@Table(name = "tableName")
public class TestBean extends PersistenceBean<TestPK> {

        private TestBean2 test2;

TransferObjekt
Code:
public class ITestBean {

        private ITestBean2 test2;

überseh ich da was oder gibt es da einen best practise weg?
 
Ich versteh dein Problem nicht. Nehmen wir an, du hast ein Interface ITestBean und eine JPA Implementierung TestBean, die mit den ganzen Annotationen versehen ist.

Deine Remoteinterface sieht dann so aus:
Java:
public interface TestRemote {

  public List<ITestBean> getAllBeans();
}

Die Implementierung:
Java:
public class TestImpl implements TestRemote {

  @SuppressWarnings("unchecked");
  public List<ITestBean> getAllBeans() {
    
    Query query = em.createQuery("from testbean x");
    return query.getResultList();
  }
}

Solang deine Entityklassen das Interface implementieren ist doch alles in Butter.

Gruß
Ollie
 
einen kleinen Schönheitsfehler hat die Sache noch, wenn das TestBean nun wieder zurückkommt zum persistieren, dann hab man nur noch Interfaces und die kann man ja nicht einfach der JPA direkt übergeben em.merge(ITestBean).

Code:
public interface ITestBean {

        public ITestBean2 getTestBean2();

        public void setTestBean2(ITestBean2 testbean2);


Was ich versuche zu erreichen ist die BusinessLogik und Persistenzebene als Komponente zu kapseln und nur noch über Interfaces zu kommunizieren (bidirektional), aber ohne große Converter Aktionen intern (alle nutzen die selben Objekte).
 
Ich will jetzt nicht lügen, aber solang dein Client die JPA implementierung da übergibt sollte das kein Problem sein. em.merge akzeptiert ja grundsätzlich erstmal Object als Parameter.

Gruß Ollie
 

Neue Beiträge

Zurück