2017-12-07 1 views
0

의 정수로 BigDecimal를 저장 : JAVA에서JPA 나는 데이터베이스에이 필드가 데이터베이스

ITEMCOST NUMERIC (13) DEFAULT 0 NOT NULL 

, 엔티티의 필드는 다음과 같이 정의된다 :

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

값은에 저장됩니다 정수로서의 데이타베이스 마지막 두 자리는 십진수입니다. 같은 :

  • DB 100 1.00
  • DB 250는 2.50
  • 을 수단 등 내가 값이 그런 식으로로드 된 엔티티를 읽을 때 내가 원하는 것은

. 데이터베이스의 값이 357이면 BigDeciamal의 값은 "3.57"이어야합니다. 엔티티를 저장할 때 값을 다시 INT로 변환해야합니다.

+2

에서 사용할 수 있습니까? – TrafLaw

+0

다음은 @PrasadMarne이 https://www.thoughts-on-java.org/jpa-21-type-converter-better-way-to/에 대해 이야기하는 내용을 설명하는 문서입니다. –

답변

1

의견과 마찬가지로 Attribute 변환기를 사용해야합니다.

찾아주세요 그것은 다음과 같을 수 있습니다 여기 https://www.thoughts-on-java.org/jpa-21-how-to-implement-type-converter/

설명 :

@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)); 
    } 
    } 
} 

는 JPA 컨버터로 보았다 그럼 당신은 당신의 엔티티

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

예! 이것은 효과가 있었다. 감사.. –

관련 문제