मैं स्कैला के साथ टकरा रहा हूं और मैं सोच रहा था कि क्या किसी को स्केल ऑब्जेक्ट्स के लिए लगातार स्टोर के रूप में हाइबरनेट और माइस्क्ल का उपयोग करने का कोई अनुभव था? क्या यह बॉक्स से बाहर काम करता है या क्या करने के लिए बहुत कुछ है?हाइबरनेट और स्कैला
उत्तर
अधिकांश समय, स्कैला + हाइबरनेट अच्छी तरह से काम करता है मामूली टक्कर जो आसानी से दूर किया जा सकता है। Exmaple के लिए, संग्रह से निपटने के दौरान, Hibernate java.util इंटरफेस के उपयोग की आवश्यकता है। लेकिन यदि आप स्कैला की अधिक शक्तिशाली लाइब्रेरी पर टैप करना चाहते हैं तो आप scala.collection.jcl.Conversions._ आयात कर सकते हैं।
आप अधिक जानकारी के लिए Frank Sommers 'पोस्ट देखना चाहते हैं।
मैंने सीधे स्केल के साथ हाइबरनेट का उपयोग नहीं किया है, लेकिन मैं जेपीए का उपयोग कर रहा हूं। हाइबरनेट एक जेपीए कार्यान्वयन प्रदान करता है, और जिस तरह से आप जेपीए लगातार कक्षाओं या हाइबरनेट को परिभाषित करते हैं, वह बहुत अलग नहीं है, इसलिए मुझे लगता है कि जेपीए परत के बिना हाइबरनेट का उपयोग करना संभव है
समस्याएं हैं। चूंकि जेपीए की कुछ विशेषताएं नेस्टेड एनोटेशन का लाभ उठाया है, उदाहरण के लिए संग्रह, आप परेशानी में हैं क्योंकि स्कैला ने अभी तक नेस्टेड एनोटेशन का समर्थन नहीं किया है। 2.8 बाहर आने पर वह चलेगा।
इस विषय और अन्य असंगतताओं पर अधिक के लिए Wille Faler’s Blog देखें।
स्कैला क्वेरी हाइबरनेट नहीं है लेकिन दिलचस्प हो सकती है।
दूसरा लिंक मृत है –
यह अब 'स्लिम' है – fallens4e
ध्यान दें कि स्काला 2.8, RC5 में अब और शीघ्र ही जारी करने के लिए उम्मीद, नेस्टेड एनोटेशन का समर्थन करता है। रिलीज में कई अन्य शानदार विशेषताएं भी हैं।
Scala version of Play Framework पर एक नज़र डालें जहां स्कैला के लिए पूर्ण जेपीए अनुकूलन है।
यह निश्चित रूप से बहुत काम नहीं है। एक साधारण हाइबरनेट + स्कैला उदाहरण को कुछ दशकों में परिभाषित किया जा सकता है। स्कैला और जावा को उसी प्रोजेक्ट में मिश्रित किया जा सकता है। विशेष रूप से, हाइबरनेट-स्कैला संयोजन जेपीए ढांचे को जोड़ना और स्केल द्वारा प्रदान की जाने वाली अपरिवर्तनीय संरचनाओं और कार्यात्मक प्रोग्रामिंग के लालित्य के साथ एक बहुत ही लचीला ऑर्म परत संभव बनाता है।
हाइबरनेट और स्कैला के साथ प्रयोग करने का सबसे आसान तरीका है हाइबरनेट/जेपीए के माध्यम से एक इन-मेमोरी hsqldb डेटाबेस का उपयोग करना। सबसे पहले, डोमेन मॉडल को परिभाषित करते हैं। इस मामले में, मेरे दोस्तों के बारे में, हाइबरनेट शैली के अनुसार एक स्कैला वर्ग एनोटेटेड।
package nl.busa.jpa
import javax.persistence._
@Entity
@Table(name = "buddy")
class Buddy(first: String, last: String) {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
var id: Int = _
var firstName: String = first
var lastName: String = last
def this() = this (null, null)
override def toString = id + " = " + firstName + " " + lastName
}
नोट कैसे स्केला वर्ग, क्योंकि हम ठेठ गेटर/सेटर बॉयलरप्लेट कोड की जरूरत नहीं है, बहुत जावा वर्ग की तुलना में अधिक कॉम्पैक्ट है। अब आइए सुनिश्चित करें कि जेपीए मॉड्यूल और डेटाबेस मॉडल लोड हो गया है।
package nl.busa.jpa
import javax.persistence.EntityManager
import javax.persistence.EntityManagerFactory
import javax.persistence.Persistence
import scala.collection.JavaConversions._
object HibernateJpaScalaTutorial {
var entityManagerFactory: EntityManagerFactory = Persistence.createEntityManagerFactory("nl.busa.jpa.HibernateJpaScalaTutorial")
var entityManager: EntityManager = entityManagerFactory.createEntityManager()
def main(args : Array[String]) {
entityManager.getTransaction().begin()
entityManager.persist(new Buddy("Natalino", "Busa"))
entityManager.persist(new Buddy("Angelina", "Jolie"))
entityManager.persist(new Buddy("Kate", "Moss"))
entityManager.getTransaction().commit()
entityManager.getTransaction().begin();
val allBuddies = entityManager.createQuery("From Buddy", classOf[Buddy]).getResultList.toList
entityManager.getTransaction().commit();
allBuddies foreach println
entityManager.close();
}
}
: के मुख्य स्केला फ़ाइल पर बढ़ते हैं,
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="nl.busa.jpa.HibernateJpaScalaTutorial">
<description>
Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide
</description>
<class>nl.busa.jpa.HibernateJpaScalaTutorial</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:JpaScala"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
</properties>
</persistence-unit>
</persistence>
दृढता विन्यास परिभाषित करने के बाद: हाइबरनेट विनिर्देश के अनुसार, की प्रसिद्ध हाइबरनेट विन्यास फाइल जोड़ने: संसाधनों/META-INF/persistence.xml
कोड काफी सरल है।एक बार जेपीए EntityManager कारखाने के माध्यम से बनाया गया है, डेटा मॉडल हाइबरनेट और जेपीए के दस्तावेज में परिभाषित तरीकों का उपयोग करके सम्मिलन, हटाने, क्वेरी के लिए उपलब्ध है।
यह उदाहरण एसबीटी का उपयोग करके स्थापित किया गया है।
HibernateJpaScalaTutorial:-:1.0.0> run
[info] Running nl.busa.jpa.HibernateJpaScalaTutorial
1 = Natalino Busa
2 = Angelina Jolie
3 = Kate Moss
[success] Total time: 4 s, completed Dec 9, 2012 4:18:00 PM
मैं स्काला साथ हाइबरनेट उपयोग कर रहा हूँ: आवश्यक संकुल पुन: प्राप्त करने, और स्रोत संकलन के बाद, ट्यूटोरियल चल निम्नलिखित लॉग का उत्पादन करेगा। वास्तविक समस्या जिसे मुझे हल करना था, हाइबरनेट में गणनाओं को कैसे बनाए रखना था। मैं GitHub पर मेरे कार्य समाधान डाल दिया
मूल रूप से एक खुद प्रयोक्ता प्रकार
abstract class EnumerationAbstractUserType(val et: Enumeration) extends UserType {
....
override def nullSafeGet(resultSet: ResultSet, names: Array[String], session: SessionImplementor, owner: Object): Object = {
val value = resultSet.getString(names(0))
if (resultSet.wasNull()) null
else et.withName(value)
}
override def nullSafeSet(statement: PreparedStatement, value: Object, index: Int, session: SessionImplementor): Unit = {
if (value == null) {
statement.setNull(index, Types.VARCHAR)
} else {
val en = value.toString
statement.setString(index, en)
}
}
- 1. स्कैला: जावा, सी #, स्कैला और सी ++
- 2. स्कैला हाइबरनेट/जेपीए - ऑटोगनेरेटेड बिटमैप $ init $ 0 मैपिंग
- 3. जेपीए और हाइबरनेट
- 4. हाइबरनेट और सभी
- 5. हाइबरनेट: session.get और session.load
- 6. जब JPA और हाइबरनेट
- 7. हाइबरनेट और फ्लाईवेट
- 8. हाइबरनेट 3 और स्प्रिंग
- 9. स्प्रिंग और हाइबरनेट
- 10. जावा, हाइबरनेट और स्प्रिंग
- 11. बिलाव, हाइबरनेट और java.io.EOFException
- 12. स्प्रिंग 3.1.1 और हाइबरनेट
- 13. स्प्रिंग, टोमकैट और हाइबरनेट
- 14. हाइबरनेट 3.3.1ga और HSQLDB
- 15. हाइबरनेट Envers और अपवाद
- 16. जावा और हाइबरनेट
- 17. हाइबरनेट और संग्रहीत प्रक्रिया
- 18. डाटाबेस ट्रिगर और हाइबरनेट
- 19. स्कैला, एंड्रॉइड और एक्लिप्स
- 20. स्कैला, मॉर्फिया और गणना
- 21. पाइथन और जावा/स्कैला
- 22. स्कैला और एचटीएमएल पार्सिंग
- 23. स्कैला और ग्रैडल
- 24. एसबीटी और स्कैला आईडीई
- 25. स्कैला पुस्तकालयों और ढांचे
- 26. एक्सकोड और स्कैला
- 27. स्कैला और जुनीट 4
- 28. क्लोजर और स्कैला इंटरऑप
- 29. ehcache/हाइबरनेट और RMI संस्थाओं
- 30. हाइबरनेट मैपिंग फ़ाइल और एनोटेशन
_Note को परिभाषित करने की जरूरत है: _ में स्केला 2.8 '' scala.collection.jcl.Conversions' ले जाया गया था scala.collection.JavaConversions'। तो आपको स्केल 2.8+ में 'import scala.collection.JavaConversions._' का उपयोग करना चाहिए। डॉक्स: http://www.scala-lang.org/api/current/scala/collection/JavaConversions$.html। –
ध्यान दें कि गणना स्कैला और हाइबरनेट के साथ एक प्रकार का दर्द है, लेकिन उन्हें लागू करना संभव है। हालांकि आश्चर्यजनक रूप से जावा में यह आसान है। – wmacura