JPA-Felder Zuordnen-Objekt ohne Erstellen von Tabellen in DB

Ich bin mit JPA, JSF, Spring.

Manchmal habe ich native SQL-Anweisungen aus, die ich habe zu verwenden. Sie sind in der Regel verbunden mit anderen Tabellen. Ich will nicht zum erstellen von Tabellen in der DB für diesen Zweck und ich möchte nicht anzeigen Feld Objekt meiner eigenen. Also, für dieses PPV hat und ResultSetMapping aber Sie haben Entity und Entity-Tabelle erstellt in der DB.

Wie kann die Verwendung der JPA-map-Feld, um Objekt für meine ohne Kisten-Tabelle(keine Person) oder was auch immer in der DB einfach?

Hier ist eine einfache, kratz-code.

Dank

import java.math.BigDecimal;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityResult;
import javax.persistence.FieldResult;
import javax.persistence.Id;
import javax.persistence.SqlResultSetMapping;

@SqlResultSetMapping(
        name="CustomerResultSetMapping",
        entities = @EntityResult(
                entityClass = Customer.class,
                fields = {
                    @FieldResult( name ="LONG_ID"           ,   column ="LONG_ID"               ),
                    @FieldResult( name ="STRING_NAME"       ,   column ="STRING_NAME"           ),
                    @FieldResult( name ="STRING_ADDRESS"    ,   column ="STRING_ADDRESS"        ),
                    @FieldResult( name ="BIGDECIMAL_PRICE"  ,   column ="BIGDECIMAL_PRICE"      ),
                    @FieldResult( name ="INT_AGE"           ,   column ="INT_AGE"               )
                }
        )
)

@Entity
public class Customer  {

    @Id         Long LONG_ID                ;
    @Column     String STRING_NAME          = "";
    @Column     BigDecimal BIGDECIMAL_PRICE = BigDecimal.ZERO;
    @Column     Integer INT_AGE             = 0;

    ///////getters and setters



}

Dao abrufen von Daten mit Systemeigenen Oracle-SQL

public List getCustomerAddress(Long customerId)  {
    try {

        String sql = "" +
                " SELECT LONG_ID," +
                "        STRING_NAME," +
                "        A.ADDRESS AS STRING_ADDRESS," +
                "        INT_AGE," +
                "         (  PRICE * NUM_TIME * (CASE WHEN NUM_TIME = 0 THEN 1 WHEN NUM_TIME IS NULL THEN 1 ELSE NUM_TIME END))  AS BIGDECIMAL_PRICE" +
                "   FROM T_CUSTOMER C, T_ADDRESS A" +
                "   WHERE C.ADDRESS_ID = A.ID AND C.ID = :CUSTOMER_ID" +
                " ";
        Query query = entityManager.createNativeQuery(sql,"CustomerResultSetMapping");
        query.setParameter("CUSTOMER_ID", customerId);
        List resultList = query.getResultList();
        return resultList;

    } catch (Exception e) {
        logger.error(e);
        return null;
    }
}
  • Hast du eine Lösung gefunden ?
  • Ja. Ich habe meine Lösung.
InformationsquelleAutor ahmet | 2013-04-03
Schreibe einen Kommentar