dbi.withHandle(handle -> handle
.createQuery("SELECT * FROM comment WHERE parent_type = :parentType AND parent_id = :parentId")
.bind("parentType", "comment")
.bind("parentId", 23)
.map(Comment.class)
.list());
نوع parent_type هو تعداد PostgreSQL. لا أعرف ما إذا كان هذا له علاقة بذلك ، فقد حدث فقط عندما أعمل مباشرة مع التعداد.
إليك رسالة الخطأ الخاصة بالرمز أعلاه:
org.skife.jdbi.v2.exceptions.CallbackFailedException: org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException: org.postgresql.util.PSQLException: ERROR: operator does not exist: parent_type = character varying
Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Position: 41 [statement:"SELECT * FROM comment WHERE parent_type = :parentType AND parent_id = :parentId", located:"SELECT * FROM comment WHERE parent_type = :parentType AND parent_id = :parentId", rewritten:"SELECT * FROM comment WHERE parent_type = ? AND parent_id = ?", arguments:{ positional:{}, named:{parentType:'entry',parentId:1}, finder:[]}]
لاحظ كيف يحاول تغذية السلسلة غير المنسقة؟
أعتقد أنك بحاجة إلى إرسال المعلمة في جملة SQL باستخدام بناء الجملة ::<enum type name>
سبيل المثال ::parent_type
:
SELECT * FROM comment WHERE parent_type = :parentType::parent_type AND parent_id = :parentId
شكرا ، هذا نجح. هل هذا شيء متعلق بـ JDBC على وجه التحديد؟ هل تعرف أين يمكنني معرفة المزيد عن بناء الجملة حتى لا أواجه المزيد من السقطات ذات الصلة في المستقبل؟
تحرير: اكتشف NamedParameters
بناء جملة ::parent_type
cast خاص بـ postgres ، على الرغم من أنه قد يتم مشاركته بواسطة أنظمة DBMS أخرى لكل ما أعرفه.
يمكنك أيضًا ربط التعداد الخاص بك كـ java.sql.Types.OTHER
بدلاً من سلسلة - يتم دعم هذا أصلاً في jdbi v3 ولكن من السهل نقله إلى الإصدار 2 إذا كنت تفضله على الإرسال:
https://github.com/jdbi/jdbi/blob/jdbi3/postgres/src/main/java/org/jdbi/v3/postgres/TypedEnumArgumentFactory.java
هناك أيضًا بناء جملة محمول: CAST(? as parent_type)
أو شيء من هذا القبيل ، والذي لا يتطلب الهروب من الأحرف :
.
stevenschlansker ألم يزيل الإصدار 2.x الأخير الحاجة إلى الهروب من ::
؟
D'oh ، أنت على حق - ما زلت أكثر قابلية للحمل على الرغم من :)
هل JDBI 3 متاح على Maven؟ أم علي أن أبني نفسي؟
تحرير: نظر إلى الموقع ، ويبدو أنه لا يزال في ألفا.
يتوفر Alpha 0: http://search.maven.org/#search٪ 7Cga٪ 7C1٪ 7Cg٪ 3A٪ 22org.jdbi٪ 22٪ 20AND٪ 20v٪ 3A٪ 223.0.0-alpha0٪ 22
بأي طريقة يمكننا بها صب عناصر متعددة في عبارة in (...)
؟
التعليق الأكثر فائدة
أعتقد أنك بحاجة إلى إرسال المعلمة في جملة SQL باستخدام بناء الجملة
::<enum type name>
سبيل المثال::parent_type
: