Wie man die Spaltennamen der JPA-entity

Alle meine JPA entity Klassen implementieren eine Schnittstelle namens Einheiten, die wie folgt definiert sind:

public interface Entity extends Serializable {
//some methods

}

Einige der Felder in meinem JPA entity haben @Column annotation auf der Oberseite von Ihnen und einige nicht. MyEntity Klasse ist definiert wie folgt:

@Entity
public class MyEntity implements Entity {

   @Id
   private Long id; //Assume that it is auto-generated using a sequence. 

   @Column(name="field1")
   private String field1;


   private SecureString field2; //SecureString is a custom class

   //getters and setters

}

Mein delete-Methode akzeptiert ein Unternehmen.

@Override
public void delete(Entity baseEntity) {

   em.remove(baseEntity); //em is entityManager
}

Wenn Sie die delete-Methode aufgerufen wird, möchte ich drei Dinge in meinem delete-Methode:

1) Felder der MyEntity Typ SecureString

2) Spalte name der jeweiligen Feld in der DB (Das Feld kann oder auch nicht haben @Column annotation)

3) der Wert Der id Feld

Beachten Sie, dass, wenn die delete() Methode wird aufgerufen, und wir wissen nicht, für welche Stelle Sie aufgerufen wird, kann es für MyEntity1, MyEntity2 etc.

Habe ich versucht etwas zu tun, wie unten:

for (Field field : baseEntity.getClass().getFields()) {
    if (SecureString.class.isAssignableFrom(field.getType())) {
        //But the field doesn't have annotation @Column specified
        Column column = field.getAnnotation(Column.class);

        String columnName = column.name();
    }
}

Aber das wird nur funktionieren, wenn das Feld hat @Column annotation. Auch er will mich nicht anderen zwei Dinge, die ich brauche. Irgendwelche Ideen?

  • Column name of that particular field in DB (The field may or may not have '@Column' annotation).. Sind Sie bei der Erstellung der Datenbank-Tabellen oder die Möglichkeit für den Ruhezustand, um Sie zu erstellen? Wenn hibernate erstellen und Sie haben nicht erwähnt das '@Column' name der variable wird als default für die Spalte name.
  • ich bin so dass hibernate die zum erstellen der Datenbank-Tabellen. Einige Felder haben '@Spalte' annotation und einige nicht. Ich Stimme mit Ihnen auf Ihre Letzte Aussage. Ich muss eine Bedingung zu überprüfen, ob ein bestimmtes Feld, ist versehen mit '@Column' oder nicht, und basierend auf dieser Spalte name geholt werden soll.
  • Hibernate liest eine ganze Zeile und alle Spalten, die besonders Zeile, und speichert es in der jeweiligen Einheit. Sie können die Werte für diese Variablen über die Get-Methoden zur Verfügung gestellt, die in Ihrer Einheit.
  • Und wie konvertiert man die Entity-Referenz zur Benutzeroberfläche Referenz zur Klasse MyEntity (da ich nicht weiß, dass die Instanz von MyEntity, so kann ich nicht einen direkten cast. Kann es sein MyEntity1, MyEntity2 etc.)? Einmal habe ich das Objekt, die ich noch brauchen, um zu bestimmen, welche der Attribute ist auf SecureString-Typ und die bekommen Ihren Wert,wie kann ich das erreichen? Könnten Sie vorschlagen, eine Antwort?
  • (da ich nicht weiß, dass die Instanz von MyEntity.) Meinst du, dass Sie nicht wissen, welche Zeile Sie versuchen, Sie zu Holen?
  • liest eine ganze Zeile und alle Spalten" - Nein, Spalten sind explizit aufgeführt in der Abfrage, d.h. niemals auftreten select *
  • Ich meinte, dass das delete () - Methode akzeptiert eine Schnittstelle, so dass innerhalb der Methode wissen wir nicht, für welche Klasse Sie aufgerufen wird. Ich habe rund 100 Personen in meiner Bewerbung und alle von Ihnen sind von der Implementierung dieser Schnittstelle.
  • Frage sehr interessant (für mich). Ich persönliche Lösung gleichermaßen hibernate-basierte Antwort oben. Existiert tragbaren, reinen JPA Antwort? Möglich ist das schreiben eigener Reflexion 'parser', implementieren alle JPA-Regeln, aber das ist reinvetiong Rad

InformationsquelleAutor Aman | 2017-09-21
Schreibe einen Kommentar