2017-03-28 10 views
14

वहाँ hibernate-java8 JAR Instant, LocalDate, आदि जैसे वर्गों के एक जोड़े के लिए एडेप्टर उपलब्ध कराने, लेकिन java.time से कुछ कक्षाएं, उदाहरण के लिए, Year, Month, YearMonth याद कर रहे हैं है। ये कक्षाएं अज्ञात Serializable की तरह संग्रहीत होती हैं, जो अनिवार्य रूप से अपर्याप्त है।हाइबरनेट को क्रमानुसार java.time.year और दूसरों

निश्चित रूप से मैं Year year के बजाय int year का उपयोग कर सकता हूं, लेकिन मुझे नहीं लगता कि यह एक अच्छा विचार है।

ऐसा लगता है कि YearJavaDescriptor लिखना बहुत आसान होना चाहिए, हालांकि, मुझे आश्चर्य है कि यह क्यों गुम है। विशेष रूप से YearMonth के मामले में, मैं दृढ़ता से एक मौजूदा एडाप्टर पसंद करूंगा, क्या कोई है? या मैं कुछ बेवकूफ कर रहा हूँ?

मुझे यकीन है कि गुगलिंग कुछ भी नहीं लौटाता है।

+1

मुझे लगता है कि इससे आपकी समस्या का जवाब देता है::

मैं निम्नलिखित की तरह पिछले कुछ में प्रयोग किया जाता http://stackoverflow.com/questions/40825495/java-time-yearmonth-as-a-type -within-entity – LLL

+1

सलाह का एक टुकड़ा जब 'YearMonth' जैसे प्रकार को क्रमबद्ध/एन्कोड करना। [अपने डेटाबेस आंकड़ों के बारे में सोचें] (https://blog.jooq.org/2016/10/05/why-you-should-design-your-डेटा-to-optimise-for-statistics/), और शायद एक से बचें बेहतर अनुकूलन योग्य के पक्ष में मानव-पठनीय प्रारूप। –

+0

@ लुकासएडर धन्यवाद, मैंने आपका ब्लॉग पोस्ट पढ़ा है। IIUIC, आप '2017-03' या '201703' की बजाय' 2000 से 'महीने या 'DATE (' 2017-03-01 ')' जैसी कुछ की सिफारिश करेंगे ताकि आंकड़े बेहतर काम कर सकें। यह दयालु है कि डेटाबेस में 'toString'/'fromString' के साथ कोई कस्टम प्रकार नहीं है, इसलिए हमारे पास दोनों पठनीयता और गति हो सकती है। – maaartinus

उत्तर

4

यदि आपका जेपीए प्रदाता एक समझदार तरीके से एक प्रकार नहीं बना रहता है (इस मामले में क्योंकि यह जावा 8 वर्ग है, जिसे जेपीए 2.1 के बाद जोड़ा गया था) तो आपको इसे बदलने के लिए जेपीए 2.1 विशेषता कनवर्टर को परिभाषित करने की आवश्यकता है एक मानक जेपीए सतत प्रकार (इस मामले में java.sql.Date की तरह कुछ)।

+0

यह जावा 8 है, लेकिन मैं हाइबरनेट-जावा 8 जार का उपयोग कर रहा हूं। – maaartinus

8

इस उद्देश्य के लिए कनवर्टर - AttributeConverter कार्यान्वयन बनाने का प्रयास करें।

@Entity 
public class RealEstateAgency { 
    @Column(name = "createdAt") 
    @Convert(converter = ZonedDateTimeConverter.class) 
    private ZonedDateTime creationDate; 
} 

@Converter(autoApply = true) 
public class ZonedDateTimeConverter implements AttributeConverter<ZonedDateTime, Date> { 
  
    public Date convertToDatabaseColumn(ZonedDateTime toConvert) { 
     return toConvert == null ? null : Date.from(toConvert.toInstant()); 
    } 
  
    public ZonedDateTime convertToEntityAttribute(Date toConvert) { 
     return toConvert == null ? null : ZonedDateTime.from(toConvert 
       .toInstant()); 
    } 
} 
संबंधित मुद्दे