Play 2

2012-08-30 15 views
11

में एकाधिक ईबेन डेटाबेस का उपयोग करने में असमर्थ हम Play Framework 2.0.3 का उपयोग करके थोड़ा जटिल प्रोजेक्ट स्थापित कर रहे हैं।Play 2

हमें कई डेटाबेस (पूर्व-मौजूदा) तक पहुंचने की आवश्यकता है और अंतर्निहित सुविधाओं (यानी ईबीन) के ढांचे का उपयोग करके इसे करना चाहते हैं।

ebean.firstDB="models.ClassA,models.ClassB,models.ClassC" 
ebean.secondDB="models.ClassD" 
ebean.thirdDB="models.ClassE,models.ClassF" 

यह प्रतीत नहीं होता:

हम "मॉडल" पैकेज के भीतर सभी मॉडल कक्षाएं बनाने के लिए, और फिर application.conf में इसी EBean संपत्ति के लिए अपने FQN साथ प्रत्येक वर्ग के नक्शे की कोशिश की कार्य:

PersistenceException: Error with [models.SomeClass] It has not been enhanced but it's superClass [class play.db.ebean.Model] is? (You are not allowed to mix enhancement in a single inheritance hierarchy) marker[play.db.ebean.Model] className[models.SomeClass] 

हमने जांच की और पुनः जांच की और कॉन्फ़िगरेशन ठीक है!

हम तो प्रत्येक डेटाबेस मॉडल कक्षाओं के लिए एक अलग जावा पैकेज का उपयोग और उन्हें application.conf में तदनुसार मैप करने के लिए करने की कोशिश की:

ebean.firstDB = "packageA.*" 
ebean.secondDB = "packageB.*" 
ebean.thirdDB = "packageC.*" 

यह ठीक काम करता है जब डेटाबेस से जानकारी को पढ़ने, लेकिन आप का प्रयास करते हुए हमें प्राप्त वस्तुओं को सहेजें/अपडेट करें:

PersistenceException: The default EbeanServer has not been defined? This is normally set via the ebean.datasource.default property. Otherwise it should be registered programatically via registerServer() 

कोई विचार?

धन्यवाद! रिकार्डो

+1

मेरे पास एक ही समस्या है, क्या आपको कोई समाधान मिला? – LeGom

उत्तर

2

जब save(), delete(), update() या refresh() उपयोग कर, आप save() विधि के लिए उदाहरण के लिए, Ebean सर्वर को निर्दिष्ट करने के लिए है:

classA.save("firstDB"); 
0

ही मामला नहीं होना सकता है, मैं इस को भाग गया कुछ क्लास ने प्लेस्टिनेशन अपवाद को प्ले 2.1.0, के साथ बढ़ाया नहीं है और केवल publicSomeClass मॉडल क्लास में घोषणा की गई थी जो मैं भूल गया था ..

खेल में 2.1.0 त्रुटि संदेश थोड़ा अलग था:

PersistenceException: java.lang.IllegalStateException: Class [class play.db.ebean.Model] is enhanced and [class models.Address] is not - (you can not mix!!) 
8

आप अपनी क्वेरी जो डेटाबेस आप उपयोग करना चाहते में निर्दिष्ट करना होगा।

उदाहरण के लिए

, यदि आप अपने secondDB से सभी उपयोगकर्ताओं प्राप्त करना चाहते हैं:

// Get access to your secondDB 
EbeanServer secondDB = Ebean.getServer("secondDB"); 

// Get all users in secondDB 
List<User> userList = secondDB.find(User.class).findList(); 
0

यह मेरी db तालिका में बचत और त्रुटि को हल करने के साथ मेरी समस्या हल हो जाती:

"javax.persistence.PersistenceException : डिफ़ॉल्ट EbeanServer को परिभाषित नहीं किया गया है? यह आमतौर पर ebean.datasource.default प्रॉपर्टी के माध्यम से सेट किया जाता है। अन्यथा इसे रजिस्टर सर्वर() "

1

के माध्यम से प्रोग्रामेटिक रूप से पंजीकृत होना चाहिए। मुझे एक ही समस्या का सामना करना पड़ता है और पूरे दिन बर्बाद हो जाता है इसकी जांच करने के लिए, आखिर में मुझे यह मिल गया है।

1।परिभाषित eabean सर्वर

db.default.driver=com.mysql.jdbc.Driver 
db.default.url="jdbc:mysql://localhost:3306/db1" 
db.default.user=root 
db.default.password=123456 

db.aux.driver=com.mysql.jdbc.Driver 
db.aux.url="jdbc:mysql://localhost:3306/db2" 
db.aux.user=root 
db.aux.password=123456 

अब आपके पास रन टाइम पर दो ईबेन सर्वर [डिफ़ॉल्ट] और [aux] हैं।

2.app conf फ़ाइल ebean.default = "मॉडल। *"

ebean.aux= "secondary.*" 

अब पैकेज मॉडल के तहत entiies। * [डिफ़ॉल्ट] सर्वर के लिए कॉन्फ़िगर और पैकेज माध्यमिक के तहत संस्थाओं। * [Aux करने के लिए कॉन्फ़िगर ] सर्वर। मुझे लगता है कि यह जावा क्लास एन्हांसमेंट या कुछ से संबंधित हो सकता है। आपको अलग-अलग पैकेजों में इकाइयों को अलग करने की आवश्यकता नहीं है, लेकिन यदि विभिन्न ईबेन सर्वर की इकाइयां एक ही पैकेज के अंतर्गत हैं, तो इससे अजीब परेशानी और अपवाद हो सकते हैं।

  1. जब आप मॉडल का उपयोग कर, बचाने// अद्यतन संबंधित विधि को नष्ट

    छात्र एस = नई छात्र पैरामीटर के रूप में सर्वर नाम जोड़ना चाहिए(); s.save ("aux");

  2. जब उपयोग खोजक, आप के रूप में

    सार्वजनिक स्थिर खोजक खोजने के = नया खोजक अपने खोजक परिभाषित करना चाहिए ("aux", Long.class, Student.class);