ใน JPA และ Spring สามารถสร้างหน่วยการคงอยู่ได้ทันทีหรือไม่

เห็นได้ชัดว่าเรามีความจำเป็นต้องสร้างหน่วยการคงอยู่ได้ทันที โดยพื้นฐานแล้ว เรามีบริการบนเว็บนี้และสคีมาที่เหมือนกันจำนวนหนึ่งซึ่งมีคลาสโดเมนเหมือนกัน เราต้องการที่จะส่งแบบสอบถามไปยังบริการเว็บโดยที่เส้นทางบริบทตรงกับสคีมา ครั้งแรกที่มีการสอบถามบริการแล้วส่งผ่านชื่อสคีมานั้นและสร้างหน่วยการคงอยู่ได้ทันทีจากนั้นจึงใช้งานทุกครั้งหลังจากนั้นและทำซ้ำขั้นตอนทุกครั้งที่มีการร้องขอบริการสำหรับสคีมาที่ยังไม่ได้ สร้าง.

เป็นไปได้ไหมที่ใช้ Spring และ JPA เนื่องจากมีสิ่งปลูกสร้างทั้งหมดที่ต้องทำเมื่อเริ่มต้นเพื่อสร้าง PU ปกติ แนวคิดที่ยอดเยี่ยมนี้สามารถปรับขนาดได้หรือไม่?


person non sequitor    schedule 15.10.2009    source แหล่งที่มา
comment
โดยสคีมาคุณหมายถึงสคีมาฐานข้อมูลหรือไม่ คุณกำลังสร้างสิ่งเหล่านั้นที่รันไทม์ด้วยหรือถูกกำหนดไว้ล่วงหน้าหรือไม่   -  person ChssPly76    schedule 16.10.2009
comment
อา เราพบกันอีกแล้ว 555 -- กำหนดไว้ล่วงหน้าโดยพื้นฐานแล้วสร้างขึ้นโดยกระบวนการอื่น   -  person non sequitor    schedule 16.10.2009


คำตอบ (1)


ดังนั้นหากสกีมาฐานข้อมูลของคุณถูกกำหนดไว้ล่วงหน้า ฉันไม่เข้าใจว่าทำไมคุณถึงต้องการสร้างหน่วยการคงอยู่ "ทันที"

ตัวอย่างเดียว - และค่อนข้างถูกประดิษฐ์ขึ้นในตอนนั้น - ฉันสามารถนึกถึงจุดที่อาจสมเหตุสมผลคือถ้าจำนวนสคีมาค่อนข้างมากและคุณไม่คาดหวังว่าสิ่งเหล่านั้นทั้งหมดจะจำเป็นในระหว่าง อายุการใช้งาน ถึงอย่างนั้น สิ่งที่คุณประหยัดได้ก็มีเพียงความทรงจำบางส่วนเท่านั้น

ดังนั้น หากฉันขาดอะไรบางอย่างไปที่นี่ (และถ้าฉันขาด โปรดชี้แจงให้ชัดเจนว่าอะไรคือสิ่งที่คุณต้องการบรรลุโดยการสร้างหน่วยการคงอยู่ "ทันที") ฉันขอแนะนำให้คุณกำหนดหน่วยการคงอยู่ทั้งหมดของคุณไว้ล่วงหน้า จากนั้นคุณสามารถสร้างหรือฉีดอินสแตนซ์ EntityManagerFactory ที่เหมาะสมได้โดยการระบุชื่อหน่วยการคงอยู่เป็นพารามิเตอร์

person ChssPly76    schedule 15.10.2009
comment
ไม่ใช่ความคิดที่ยอดเยี่ยมของฉัน แต่เห็นได้ชัดว่าเราไม่ต้องการเขียน PU ที่จำเป็นทั้งหมดในไฟล์ Peristence.xml แต่ฉันพยายามโน้มน้าวใจว่าเราจำเป็นต้องเขียน PU ในไฟล์ xml แล้วเขียน EntityManagerFactoryBeans เพิ่มเติม ดังนั้นเมื่อมีการเพิ่มไคลเอนต์ใหม่ สคีมาใหม่จะถูกสร้างขึ้น จากนั้นเว็บเซอร์ตรวจสอบของเราจะถูกใช้เพื่อสอบถามว่าตารางชั่วคราวจะเป็นออบเจ็กต์โดเมนแบบอ่านอย่างเดียวและไม่เปลี่ยนรูป ดังนั้นฉันคิดว่าเราควรใช้แคช L2 คุณจะค้นหาการรวม Memcached กับ Hibernate ได้อย่างไร - person non sequitor; 16.10.2009
comment
เป็นที่เข้าใจได้อย่างสมบูรณ์แบบที่ไม่ต้องการทำซ้ำโค้ดทั้งหมดนั้นใน Persistence.xml แต่ไม่มีสิ่งใดขัดขวางไม่ให้คุณทำเวทมนตร์ XSLT เล็กน้อย ประเด็นก็คือมันง่ายกว่ามากที่จะทำในระหว่างเวลาสร้างมากกว่าระหว่างรันไทม์ เท่าที่ memcached ดำเนินไป ฉันไม่เคยปรับใช้มันในการใช้งานจริง (ใช้ ehcache และ jboss cache สำหรับคลัสเตอร์) แต่มีผู้ให้บริการ (บุคคลที่สาม) สำหรับ Hibernate (code.google.com/p/hibernate-memcached); ไม่มีเหตุผลว่าทำไมมันไม่ควรทำงาน - person ChssPly76; 16.10.2009
comment
นอกจากนี้หากฉันเพิ่มสคีมาใหม่ จะมีการโหลด PU ใหม่หรือไม่ เนื่องจากถูกเพิ่มทีละน้อยโดยไม่ต้องรีสตาร์ทเซิร์ฟเวอร์ ฉันคิดว่านี่เป็นข้อกังวลหลัก โดยไม่จำเป็นต้องดึงเซิร์ฟเวอร์ลงเพื่อเพิ่ม PU ใหม่ เพื่อให้ไคลเอนต์สามารถสืบค้นตารางได้ - person non sequitor; 16.10.2009
comment
อ่า... นั่นค่อนข้างจะเป็นปัญหา ด้วย Raw Hibernate คุณสามารถสร้าง sessionFactory ใหม่และแทนที่อันที่มีอยู่ได้ สำหรับ JPA คุณกำลังมองหาการเขียน PersistenceProvider ของคุณเองเพื่อทำสิ่งนั้น - person ChssPly76; 16.10.2009
comment
การตอบสนองค่อนข้างช้า แต่เป็นข้อกำหนดที่ถูกต้องอย่างแน่นอนในกรณีของแอปพลิเคชันที่มีผู้เช่าหลายราย โดยผู้เช่าแต่ละรายจัดเก็บข้อมูลของเขาในฐานข้อมูลแยกต่างหากด้วยสคีมาที่เหมือนกัน และฐานข้อมูลผู้เช่าเหล่านั้นสามารถเพิ่มได้ทันทีโดยไม่ต้องรีสตาร์ท webapp - person Yuriy Nakonechnyy; 07.05.2015