2011-01-17 6 views
0

Ich habe eine Datenbank und die Tabellen in dieser Datenbank sind miteinander verbunden. Ich verwende Naht und EJB, um Daten innerhalb dieser Tabellen in der Datenbank zu verarbeiten. Meine Backend-Datenbank ist Postgres.Logisches Löschen aus einer EJB-Datenbank

Nun, was ich versuche zu tun ist, dass ich Daten aus einer Tabelle löschen möchte, aber ich bekomme einen postgres SQL-Fehler, der mir sagt, dass ich Regeln verletze. Ich verstehe, dass ich diese Datenbank logisch löschen kann
- Eine Situation, in der ich die Datenbank löschen und ein Flag setzen muss.

Aber ich weiß nicht, wie das geht. Ich weiß, das ist einfach, aber entschuldige mich. Ich weiß es nicht. Jede Hilfe wird dankbar sein. Unten ist der Code, den ich verwende. Danke für Ihre Hilfe.

public void delete() throws java.sql.SQLException { 
    System.out.println("I got here FIRST"); 
    user =em.find(Subscriber.class, subscriber.getId()); //ADDED LATER 
    users.remove(subscriber.getId()); 
    em.remove(subscriber); 
    userList(); 
} 
+0

Bitte zeigen Sie die Ausnahme, die Sie bekommen, und informieren Sie uns auch, welche Art von Persistenz-Manager Sie verwenden (Hibernate, TopLink usw.) –

+0

Welche Art von Regeln verletzen Sie? – Navi

Antwort

1

Von was ich auf den ersten Blick sehe, ist, dass Sie vielleicht den Benutzer löschen möchten, den Sie abfragen?

So ändern em.remove(subscriber);-em.remove(user); // die Sie von der Methode find laden

aktualisieren

Ohne wissen, welche Art von flag Sie gegen überprüfen möchten, lassen Sie mich zeigen, wie Sie dies tun können :

Nehmen wir an, Benutzer hat ein boolesches Feld namens deaktiviert, und Sie möchten nur deaktivierte Benutzer entfernen.

if(user.isDisabled()) 
    em.remove(user); 

So nur Sie Benutzer entfernen, wenn flag wahr ist.

+0

Danke für Ihre Antwort Shervin, Sie haben Recht. Dieser Code funktioniert. users = subscribers und user = subscriber, aber ich möchte eine Situation, wo ich em.remove (user) mache, wird es nur logisch mit einem Flag entfernen, das auf true oder false gesetzt ist, und wenn es falsch ist, wird es entfernt, aber wird mich nicht veranlassen jede Postgres-Regel zu verletzen. irgendeine Hilfe. Als Kyou – sammy

+0

Danke Shervin. Obwohl ich das nicht getestet habe und ich werde es immer noch testen. Aber ich werde fragen, ob das möglich ist. Denken Sie daran, dass mein Benutzer eine eigene Einheit ist. Wie kann ich dann eine Flagge machen, da es sich um eine ejb-Einheit handelt? Ist es möglich, dass, wenn ich es einfach so mache, es funktionieren wird oder muss ich es auf Boolean umwandeln? Vielen Dank für Ihre Antwort. Es scheint, dass ich dorthin komme. – sammy

+0

@sammy: Sie müssen Ihren Code entsprechend ändern. Wenn Sie mir sagen könnten, was diese Flagge ist, dann kann ich Ihnen helfen. Wenn Sie feststellen, dass das Hinzufügen neuer Methoden zu Problemen in Ihrer Entity-Bean führt, können Sie die Annotation '@ Transient 'zusätzlich zur Methode hinzufügen. Dadurch wird Ihr Persistenzanbieter angewiesen, diese Methode zu überspringen. –