Float FIeld를 HIbernate Mapping에서 BigDecimal로 받았을때..
Submitted by captain on 수, 05/19/2010 - 23:02
안녕하세요.
정밀한 계산이 필요하여, Oracle Float Field를
hbm.xml 및 VO에 BigDecimal로 설정하여 받고자 합니다.
Float으로 1.0000000000000000000001 은 java.lang.Float으로는 가져올수가 없는데, (1.0)
이쪽 메뉴얼이나 웹에서도 Float field는 Float으로 매핑된다고 나와 있어서요.
문제가 없을지 궁금합니다.


Re\ Float FIeld를 HIbernate Mapping에서 BigDecimal로 받았을때..
Anyframe 매뉴얼에 기재된 Java Primitive Mapping Type은 Hibernate에서 객체와 특정 DB 칼럼을 매핑할 때 표준으로 사용하는 매핑 스타일을 언급한 것입니다. 즉, hbm.xml 파일에 매핑 타입을 명시하지 않을 경우 표준 룰에 따라 처리하게 된다는 것을 의미합니다. 매핑 타입은 변경이 가능하며 전달되는 데이터의 특성상 Float 객체로 커버할 수 없는 값을 가지고 있어 데이터 손실이 우려될 경우 적당한 타입을 지정하셔서 사용하시면 됩니다.
참고로 Eclipse에서 Hibernate Tools Plugin을 이용하여 Float type column (Oracle 10g 기준)을 가진 테이블에 대해 java.lang.Double 형태로 VO 객체를 생성해내고 있습니다.
* TABLE CREATE TABLE TB_HIBERNATE_FLOAT_TEST ( test_id VARCHAR2(10), test_data FLOAT, PRIMARY KEY (test_id)) * Generated VO public class TbHibernateFloatTest implements java.io.Serializable { private String testId; private Double testData; // getter, setter } * Generated hbm.xml <hibernate-mapping> <class name="anyframe.test.TbHibernateFloatTest" table="TB_HIBERNATE_FLOAT_TEST"> <id name="testId" type="string"> <column name="TEST_ID" length="10" /> <generator class="assigned" /> </id> <property name="testData" type="java.lang.Double"> <column name="TEST_DATA" precision="126" scale="0" /> </property> </class> </hibernate-mapping>