मैं ड्रॉपविज़ार्ड के साथ खेल रहा हूं और मैं एक आरईएसटी एप्लीकेशन बनाना चाहता हूं जिसमें इकाइयों में विभिन्न विदेशी-महत्वपूर्ण संबंध हैं।जेडीबीआई आवेषण पर स्वत: उत्पन्न मूल्य लौटा
उदाहरण के लिएदिया निम्नलिखित 3 टेबल:
-- table persons
CREATE TABLE PUBLIC.PERSONS(
ID BIGINT DEFAULT NOT NULL AUTOINCREMENT,
FIRST_NAME VARCHAR(255),
LAST_NAME VARCHAR(255),
BIRTHDAY DATE,
ADDRESS_ID BIGINT NOT NULL,
CREATED TIMESTAMP DEFAULT 'current_timestamp',
MODIFIED TIMESTAMP
);
ALTER TABLE PUBLIC.PERSONS ADD CONSTRAINT PUBLIC.PK_PERSONS PRIMARY KEY(ID);
-- table customers
CREATE TABLE PUBLIC.CUSTOMERS(
ID BIGINT DEFAULT NOT NULL AUTOINCREMENT,
PERSON_ID BIGINT NOT NULL,
STATUS_CODE VARCHAR(100) DEFAULT 'ACQUISITION' NOT NULL,
CREATED TIMESTAMP DEFAULT 'current_timestamp',
MODIFIED TIMESTAMP
);
ALTER TABLE PUBLIC.CUSTOMERS ADD CONSTRAINT PUBLIC.PK_CUSTOMERS PRIMARY KEY(ID);
-- table addresses
CREATE TABLE PUBLIC.ADDRESSES(
ID BIGINT DEFAULT NOT NULL AUTOINCREMENT,
LINE_1 VARCHAR(255),
LINE_2 VARCHAR(255),
ZIP VARCHAR(255),
CITY VARCHAR(255),
COUNTRY_CODE VARCHAR(3),
PHONE VARCHAR(255),
FAX VARCHAR(255),
CREATED TIMESTAMP DEFAULT 'current_timestamp',
MODIFIED TIMESTAMP
);
ALTER TABLE PUBLIC.ADDRESSES ADD CONSTRAINT PUBLIC.PK_ADDRESSES PRIMARY KEY(ID);
-- and following forign key constraints:
ALTER TABLE PUBLIC.PERSONS ADD CONSTRAINT
PUBLIC.FK_PERSON_ADDRESS FOREIGN KEY(ADDRESS_ID)
REFERENCES PUBLIC.ADDRESSES(ID) ON DELETE SET NULL NOCHECK;
ALTER TABLE PUBLIC.CUSTOMERS ADD CONSTRAINT
PUBLIC.FK_CUSTOMER_PERSON FOREIGN KEY(PERSON_ID)
REFERENCES PUBLIC.PERSONS(ID) ON DELETE SET NULL NOCHECK;
मैं एक customerDAO है कि ग्राहक की मेज एक dthe संदर्भित एक SQL क्वेरी के साथ टेबल के डेटा पढ़ता है लागू करने के लिए शुरू कर दिया है, कि बहुत जटिल नहीं था:
@RegisterMapper(CustomerResultMapper.class)
public interface CustomerDAO {
@SqlQuery("select p.id as person_id, "
+ "p.first_name, p.last_name, p.birthday, "
+ "c.id as customer_id, c.status_code, "
+ "a.id as address_id, a.line_1, a.line_2, a.zip, "
+ "a.city, a.country_code, a.phone, a.fax "
+ "from customers c, persons p, addresses a "
+ "where c.id = :id "
+ "and c.person_id = p.id "
+ "and p.address_id = a.id")
public Customer findCustomerById(@Bind("id") long id);
}
(संक्षिप्तता के लिए, मैं नक्शाकार को छोड़, के बाद से है कि मेरे वास्तविक सवाल नहीं है)
अब मैं एक नए ग्राहक सम्मिलित करना चाहते हैं, मैं संदर्भित तालिकाओं में मौजूद डेटा समेत सभी आवश्यक डेटा हैं।
मुझे जेडीबी एनोटेशन के साथ कई प्रश्नों को निष्पादित करने का तरीका नहीं मिला, इसलिए मुझे लगा कि मुझे टेबल में से प्रत्येक के लिए एक डीएओ विधि बनाना है और जावा के भीतर से डेटा डालना है, मैन्युअल रूप से विदेशी कुंजी संदर्भों को अपडेट करना ।
लेकिन यह भी काम नहीं करता है क्योंकि मुझे डालने के बाद स्वत: उत्पन्न आईडी मान पढ़ने का कोई तरीका नहीं मिला।
कोई विचार यह है कि मैं इस समस्या से कैसे संपर्क कर सकता हूं ताकि मैं संदर्भों को सही रख सकूं?
आप विधि एक सूची वापसी बनाने की कोशिश की है:
आप पता करने के लिए एक नक्शाकार है @SqlQuery को @SqlUpdate बदल रहा है और सम्मिलित करें का उपयोग कर ... * लौटने के बाद यह सोचते हैं द्वारा यह कर सकता है? –
नहीं, जहां तक मैं समझता हूं कि GetGeneratedKeys Annotation मान एसिंट या लंबा देता है, तो आप एक सूची वापस नहीं कर सकते हैं। –
org.skife.jdbi.v2.GeneratedKeys को देखकर, यह काम कर सकता है। कोड java.sql.Statement.getGeneratedKeys() को कॉल करता है जो एक परिणामसेट देता है। कोशिश करो। –