2017-12-07 3 views
0

Ich habe dieses Feld in der Datenbank:JPA speichern BigDecimal als ganze Zahl in Datenbank

ITEMCOST NUMERIC (13) DEFAULT 0 NOT NULL 

In JAVA, das Feld in der Entity wird wie folgt definiert:

@Column(name = "ITEMCOST") 
private BigDecimal itemCost; 

Die gespeicherten Werte werden in die Datenbank als Integer. Wo die letzten zwei Ziffern die Dezimalwerte sind. dies wie:

  • DB bedeutet 1,00
  • DB bedeutet 2,50
  • etc

Was ich will, ist, wenn ich das Entity gelesen wird der Wert so geladen. Wenn der Wert in der Datenbank 357 ist, sollte BigDeciamal den Wert "3.57" haben. Und wenn ich diese Entität speichere, sollte der Wert wieder als INT konvertiert werden.

+2

haben Sie in JPA-Wandler geschaut? – TrafLaw

+0

Hier ist ein Artikel, der beschreibt, worüber @PrasadMarne spricht https://www.thoughts-on-java.org/jpa-21-type-converter-better-way-to/ –

Antwort

1

Wie die Kommentare sagen, sollten Sie einen Attributkonverter verwenden.

finden Sie eine Beschreibung hier https://www.thoughts-on-java.org/jpa-21-how-to-implement-type-converter/

Es könnte wie folgt aussehen:

@Converter 
public class BigDecimalConverter implements AttributeConverter<BigDecimal, Long> { 

    @Override 
    public Long convertToDatabaseColumn(BigDecimal value) { 
    if (value == null) { 
     return null; 
    } else { 
     return value.multiply(BigDecimal.valueOf(100)).longValue(); 
    } 
    } 

    @Override 
    public BigDecimal convertToEntityAttribute(Long value) { 
    if (value == null) { 
     return null; 
    } else { 
     return new BigDecimal(value).divide(BigDecimal.valueOf(100)); 
    } 
    } 
} 

Dann können Sie es in Ihrem Unternehmen verwenden

@Convert(converter = BigDecimalConverter.class) 
@Column(name = "ITEMCOST") 
private BigDecimal itemCost; 
+0

Yeah! das hat funktioniert. Vielen Dank.. –

Verwandte Themen