मैं अपने मौजूदा जेपीए एंटाइट्स से JOOQ कक्षाएं उत्पन्न करने के लिए JPADatabase का उपयोग कर रहा हूं। मैनुअल से, मुझे पता है कि जेपीएडेटाबेस मेटा डेटा स्कीमा को पढ़ने और कोड उत्पन्न करने के लिए आंतरिक रूप से एच 2 डेटाबेस का उपयोग करता है। H2 डेटाबेस के कारण न्यूमेरिक के लिए कोई डेटा प्रकार नहीं है, इसके बजाय इसमें दशमलव है। इसलिए मेरे सभी संख्यात्मक डेटा प्रकार SQLDataType.DECIMAL में परिवर्तित हो जाते हैं।

public final TableField<MyTableRecord, BigDecimal> NUM_FIELD = createField(DSL.name("NUM_FIELD"), SQLDataType.DECIMAL, this, "");

मैं कोड जीन चलाते समय SQLDataType.NUMERIC उत्पन्न करने के लिए मजबूर टाइप का उपयोग करने का भी प्रयास करता हूं, लेकिन परिणाम अभी भी SQLDataType.DECIMAL दिखाता है। और मैंने पाया कि यह डबल के लिए भी काम करता है, अगर मैं SQLDataType.DOUBLE को फोर्स टाइप में डालता हूं, लेकिन सिर्फ SQLDataType.NUMERIC के लिए काम नहीं करता।

<forcedTypes>
                    <forcedType>
                      <name>NUMERIC</name>
                      <includeExpression>.*\.num_field</includeExpression>
                      <includeTypes>.*</includeTypes>
                      <nullability>ALL</nullability>
                      <objectType>ALL</objectType>
                    </forcedType>
                  </forcedTypes>

क्या SQLDataType.NUMERIC बनाने के लिए JPADatabase कोड को सामान्य बनाने का कोई तरीका है?

3
Chris Lee 8 नवम्बर 2020, 03:32

1 उत्तर

सबसे बढ़िया उत्तर

अधिकांश बोलियों में, DECIMAL और NUMERIC के बीच का अंतर मायने नहीं रखता, खासकर जब आप पहले से मौजूद DDL स्टेटमेंट से क्लाइंट कोड जेनरेट करते हैं। DECIMAL और NUMERIC प्रकार के वेरिएबल को बाइंड करने का क्लाइंट लॉजिक jOOQ में लगभग समान है।

आपके मजबूर प्रकार को लागू नहीं किए जाने का कारण यह है कि नियमित अभिव्यक्ति केस संवेदनशील होती है। जैसा कि आपका जेनरेट कोड दिखाता है, कॉलम को NUM_FIELD (ऊपरी मामले में) कहा जाता है। इसे हल करने का एक तरीका है अपने रेगेक्स केस को असंवेदनशील बनाना:

<includeExpression>(?i:.*\.num_field)</includeExpression>
0
Lukas Eder 9 नवम्बर 2020, 08:40