คำถามติดแท็ก hibernate

Hibernate เป็นไลบรารีการทำแผนที่วัตถุเชิงสัมพันธ์ (ORM) สำหรับภาษาจาวาที่ช่วยให้นักพัฒนาสามารถใช้โมเดลโดเมนแบบ POJO ในแอปพลิเคชันของพวกเขาในวิธีที่ขยายได้ดีกว่าการทำแผนที่วัตถุ / เชิงสัมพันธ์

3
ไฮเบอร์เนตการออกแบบแอปพลิเคชันแบบโหลดขี้เกียจ
ฉันมักจะใช้Hibernateร่วมกับSpring framework และเป็นความสามารถในการแบ่งเขตธุรกรรมแบบเปิดเผย (เช่น@Transactional ) อย่างที่เราทุกคนทราบกันดีว่าไฮเบอร์เนตพยายามที่จะไม่รุกรานและโปร่งใสที่สุดเท่าที่จะเป็นไปได้อย่างไรก็ตามสิ่งนี้พิสูจน์ได้ว่าท้าทายกว่าเล็กน้อยเมื่อใช้lazy-loadedความสัมพันธ์ ฉันเห็นทางเลือกในการออกแบบจำนวนมากที่มีระดับความโปร่งใสแตกต่างกัน ทำให้ความสัมพันธ์ไม่ขี้เกียจโหลด (เช่น fetchType=FetchType.EAGER) นี่มันม่วงทั้งไอเดียขี้เกียจโหลด .. เริ่มต้นคอลเลกชันโดยใช้ Hibernate.initialize(proxyObj); นี่หมายถึงการมีเพศสัมพันธ์ที่ค่อนข้างสูงกับ DAO แม้ว่าเราสามารถกำหนดอินเทอร์เฟซได้initializeแต่การใช้งานอื่น ๆ ก็ไม่รับประกันว่าจะให้สิ่งที่เทียบเท่า เพิ่มลักษณะการทำธุรกรรมให้กับModelอ็อบเจ็กต์ถาวร(โดยใช้พร็อกซีแบบไดนามิกหรือ@Transactional ) ฉันไม่ได้ลองใช้วิธีพร็อกซีแบบไดนามิกแม้ว่าฉันจะไม่เคยให้ @Transactional ทำงานกับวัตถุถาวรด้วยตัวเอง อาจเป็นเพราะการจำศีลนั้นกำลังดำเนินการกับพร็อกซีที่จะเข้ามา สูญเสียการควบคุมเมื่อมีการทำธุรกรรมเกิดขึ้นจริง ระบุทั้ง lazy / non-lazy API เช่นloadData()และloadDataWithDeps() บังคับให้แอปพลิเคชันรู้ว่าเมื่อใดควรใช้รูทีนใดการมีเพศสัมพันธ์ที่แน่นหนาอีกครั้ง วิธีล้นloadDataWithA(),, .... ,loadDataWithX() บังคับให้ค้นหาการอ้างอิงเช่นโดยจัดเตรียมbyId()การดำเนิน การเท่านั้น ต้องใช้กิจวัตรที่ไม่ใช่เชิงวัตถุจำนวนมากเช่นfindZzzById(zid)แล้วgetYyyIds(zid)แทนที่จะเป็นz.getY() การดึงแต่ละวัตถุในคอลเลกชันทีละรายการจะเป็นประโยชน์หากมีค่าใช้จ่ายในการประมวลผลระหว่างธุรกรรมจำนวนมาก สร้างส่วนหนึ่งของแอปพลิเคชัน @Transactional แทนDAOเท่านั้น ข้อควรพิจารณาที่เป็นไปได้ของธุรกรรมที่ซ้อนกัน ต้องใช้กิจวัตรที่ปรับให้เหมาะกับการจัดการธุรกรรม (เช่นเล็กน้อยพอเพียง) ผลกระทบทางโปรแกรมเล็กน้อยแม้ว่าอาจทำให้เกิดธุรกรรมจำนวนมาก จัดเตรียม DAO ด้วยโปรไฟล์การดึงข้อมูลแบบไดนามิกเช่นloadData(id, …

3
mappedBy อ้างอิงคุณสมบัติของเอนทิตีเป้าหมายที่ไม่รู้จัก
ฉันมีปัญหาในการตั้งค่าความสัมพันธ์แบบหนึ่งต่อกลุ่มมากในวัตถุที่มีคำอธิบายประกอบของฉัน ฉันมีสิ่งต่อไปนี้: @MappedSuperclass public abstract class MappedModel { @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="id",nullable=false,unique=true) private Long mId; แล้วนี่ @Entity @Table(name="customer") public class Customer extends MappedModel implements Serializable { /** * */ private static final long serialVersionUID = -2543425088717298236L; /** The collection of stores. */ @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL, fetch = FetchType.LAZY) …

4
มีอะไรใหม่ใน Hibernate 4
ฉันเพิ่งเห็นว่ามีการเปิดตัวเบต้าของ Hibernate 4 มีอะไรใหม่ใน 4 เทียบกับ 3 (.6) ฉันไม่พบข้อมูลนี้ในการประกาศเบต้าหรือเมื่อ Googling ชื่อคำถามนี้

7
ไฮเบอร์เนตรหัสการเพิ่มอัตโนมัติ
ฉันมีแอปพลิเคชัน j2ee ที่ใช้โหมดไฮเบอร์เนตพร้อมคำอธิบายประกอบ ฉันจะใส่คำอธิบายประกอบฟิลด์ Id ในคลาส pojo ของฉันได้อย่างไรเพื่อตั้งค่าเป็นการเพิ่มอัตโนมัติหรือสร้างขึ้นโดยอัตโนมัติ และในการเพิ่ม bean ฉันจะปล่อยฟิลด์นั้นไว้ใน bean null หรือไม่?

7
ย้อนกลับธุรกรรมหลังจาก @Test
ก่อนอื่นฉันพบเธรดจำนวนมากใน StackOverflow เกี่ยวกับเรื่องนี้ แต่ไม่มีสิ่งใดที่ช่วยฉันได้จริงๆขอโทษที่ถามคำถามที่อาจซ้ำกัน ฉันกำลังทำการทดสอบ JUnit โดยใช้การทดสอบสปริงโค้ดของฉันมีลักษณะเช่นนี้ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {}) public class StudentSystemTest { @Autowired private StudentSystem studentSystem; @Before public void initTest() { // set up the database, create basic structure for testing } @Test public void test1() { } ... } ปัญหาของฉันคือฉันต้องการให้การทดสอบของฉันไม่มีผลต่อการทดสอบอื่น ๆ ดังนั้นฉันต้องการสร้างบางสิ่งเช่นย้อนกลับสำหรับการทดสอบแต่ละครั้ง ฉันค้นหาสิ่งนี้มามากมาย แต่ฉันไม่พบอะไรเลย ฉันใช้ Hibernate …

10
วิธีที่ "เหมาะสม" ในการส่ง Hibernate Query.list () ไปยัง List <Type> คืออะไร?
ฉันเป็นมือใหม่ที่ใช้ Hibernate และฉันกำลังเขียนวิธีง่ายๆในการส่งคืนรายการวัตถุที่ตรงกับตัวกรองเฉพาะ List&lt;Foo&gt;ดูเหมือนเป็นประเภทผลตอบแทนตามธรรมชาติ สิ่งที่ผมทำผมไม่สามารถดูเหมือนจะทำให้มีความสุขคอมไพเลอร์, @SuppressWarningsถ้าฉันจ้างน่าเกลียด import java.util.List; import org.hibernate.Query; import org.hibernate.Session; public class Foo { public Session acquireSession() { // All DB opening, connection etc. removed, // since the problem is in compilation, not at runtime. return null; } @SuppressWarnings("unchecked") /* &lt;----- */ public List&lt;Foo&gt; activeObjects() { Session s …

4
JPA inheritance @EntityGraph มีการเชื่อมโยงทางเลือกของคลาสย่อย
ด้วยรูปแบบโดเมนต่อไปนี้ฉันต้องการโหลดAnswers ทั้งหมดรวมถึงValues และ sub-children ที่เกี่ยวข้องและวางลงในAnswerDTOเพื่อแปลงเป็น JSON ฉันมีวิธีการแก้ปัญหาการทำงาน แต่มันทนทุกข์ทรมานจากปัญหา N + 1 @EntityGraphที่ฉันต้องการที่จะกำจัดโดยใช้เฉพาะกิจ LAZYสมาคมทั้งหมดมีการกำหนดค่า @Query("SELECT a FROM Answer a") @EntityGraph(attributePaths = {"value"}) public List&lt;Answer&gt; findAll(); ใช้ ad-hoc @EntityGraphบนRepositoryวิธีการที่ฉันสามารถมั่นใจได้ว่าค่าถูกดึงมาล่วงหน้าเพื่อป้องกัน N + 1 ในการAnswer-&gt;Valueเชื่อมโยง ในขณะที่ผลลัพธ์ของฉันดีมีปัญหาอีก N + 1 เพราะขี้เกียจโหลดความselectedสัมพันธ์ของMCValues ใช้สิ่งนี้ @EntityGraph(attributePaths = {"value.selected"}) ล้มเหลวเนื่องจากselectedฟิลด์เป็นส่วนหนึ่งของValueเอนทิตีบางส่วนเท่านั้น: Unable to locate Attribute with the the given name …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.