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

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

14
เมื่อใดและเพราะเหตุใดเอนทิตี JPA ควรใช้อินเตอร์เฟสที่สามารถทำให้เป็นอนุกรมได้
คำถามอยู่ในชื่อเรื่อง ด้านล่างฉันเพิ่งอธิบายความคิดและข้อสรุปบางอย่างของฉัน เมื่อฉันมีรูปแบบโดเมนที่ง่ายมาก (3 ตารางโดยไม่มีความสัมพันธ์ใด ๆ ) องค์กรของฉันทั้งหมดไม่ได้ใช้ Serializable แต่เมื่อโมเดลโดเมนมีความซับซ้อนมากขึ้นฉันก็มี RuntimeException ซึ่งบอกว่าหนึ่งในเอนทิตีของฉันไม่ได้ใช้ Serializable ฉันใช้ Hibernate เป็นการนำ JPA ไปใช้ ฉันสงสัยว่า: มันเป็นข้อกำหนด / พฤติกรรมเฉพาะของผู้ขายหรือไม่? เกิดอะไรขึ้นกับเอนทิตีที่เป็นอนุกรมของฉัน พวกเขาควรจะเป็นแบบอนุกรมสำหรับการจัดเก็บหรือถ่ายโอน? ในขณะใดที่จำเป็นต้องทำให้เอนทิตีของฉันเป็นอนุกรม?

7
วิธีดึงข้อมูลการเชื่อมโยง FetchType.LAZY กับ JPA และไฮเบอร์เนตใน Spring Controller
ฉันมีคลาสบุคคล: @Entity public class Person { @Id @GeneratedValue private Long id; @ManyToMany(fetch = FetchType.LAZY) private List<Role> roles; // etc } ด้วยความสัมพันธ์แบบหลายต่อหลายคนที่ขี้เกียจ ในตัวควบคุมของฉันฉันมี @Controller @RequestMapping("/person") public class PersonController { @Autowired PersonRepository personRepository; @RequestMapping("/get") public @ResponseBody Person getPerson() { Person person = personRepository.findOne(1L); return person; } } และ PersonRepository เป็นเพียงรหัสนี้เขียนตามคู่มือนี้ public interface …

4
อะไรคือความแตกต่างระหว่างการเชื่อมโยง JPA และไฮเบอร์เนตแบบทิศทางเดียวและแบบสองทิศทาง
ความแตกต่างระหว่างการเชื่อมโยงแบบทิศทางเดียวและแบบสองทิศทางคืออะไร? เนื่องจากตารางที่สร้างใน db นั้นเหมือนกันทั้งหมดดังนั้นความแตกต่างเพียงอย่างเดียวที่ฉันพบคือแต่ละด้านของการเชื่อมโยงแบบสองทิศทางจะมีการอ้างถึงอีกด้านหนึ่งและไม่มีทิศทางเดียว นี่คือการเชื่อมโยงแบบทิศทางเดียว public class User { private int id; private String name; @ManyToOne @JoinColumn( name = "groupId") private Group group; } public class Group { private int id; private String name; } การเชื่อมโยงแบบสองทิศทาง public class User { private int id; private String name; @ManyToOne @JoinColumn( name = …


3
JPA กับ Spring Data JPA แตกต่างกันอย่างไร
ฉันสับสนเล็กน้อยเกี่ยวกับความแตกต่างระหว่าง Spring Data-JPA และ JPA ฉันรู้เกี่ยวกับ JPA ว่าเป็นข้อมูลจำเพาะสำหรับการคง Java Objects ให้กับฐานข้อมูลเชิงสัมพันธ์โดยใช้เทคโนโลยี ORM ที่เป็นที่นิยม กล่าวอีกนัยหนึ่ง JPA ให้บริการอินเทอร์เฟซและเทคโนโลยี ORM อื่น ๆ ใช้อินเทอร์เฟซที่รู้จักในฐานะผู้ให้บริการ JPA เช่นไฮเบอร์เนต ตอนนี้ Spring Data JPA คืออะไร? Spring Data JPA ได้เพิ่มฟังก์ชั่นเพิ่มเติม (การเชื่อมต่อ) ผ่าน JPA และยังคงมีการระบุไว้เท่านั้นหรือเป็นผู้ให้บริการ JPA ด้วยหรือไม่ ฉันเห็น Spring Data JPA ทำงานได้กับที่เก็บข้อมูล (เลเยอร์ DAO: ถ้าฉันไม่ผิด) ดังนั้นฉันหมายความว่ามันแตกต่างกันอย่างไรเมื่อใช้ 'Spring Data JPA + …

8
ความแตกต่างระหว่างหนึ่งต่อหลายหลายต่อหนึ่งและหลายต่อหลายคน?
ตกลงดังนั้นนี่อาจเป็นคำถามเล็กน้อย แต่ฉันมีปัญหาในการมองเห็นและเข้าใจความแตกต่างและเวลาที่จะใช้แต่ละครั้ง ฉันยังไม่ชัดเจนว่าแนวคิดเช่นการแมปแบบทิศทางเดียวและแบบสองทิศทางมีผลต่อความสัมพันธ์แบบหนึ่งต่อหลาย / หลายต่อหลายครั้งอย่างไร ฉันกำลังใช้ Hibernate อยู่ตอนนี้ดังนั้นคำอธิบายใด ๆ ที่เกี่ยวข้องกับ ORM จะเป็นประโยชน์ ตัวอย่างเช่นสมมติว่าฉันมีการตั้งค่าต่อไปนี้: public class Person{ private Long personId; private Set<Skill> skills; //Getters and setters } public class Skill{ private Long skillId; private String skillName; //Getters and setters } ดังนั้นในกรณีนี้ฉันจะมีการทำแผนที่แบบไหน? คำตอบสำหรับตัวอย่างเฉพาะนี้ได้รับการชื่นชมอย่างแน่นอน แต่ฉันก็อยากจะเห็นภาพรวมของเวลาที่จะใช้แบบตัวต่อตัวและแบบตัวต่อตัวและเมื่อใดที่จะใช้ตารางการเข้าร่วมกับคอลัมน์การเข้าร่วมและทิศทางเดียวกับแบบสองทิศทาง


30
Hibernate - การอัพเดตแบบกลุ่มส่งคืนจำนวนแถวที่ไม่คาดคิดจากการอัพเดต: 0 จำนวนแถวจริง: 0 คาดว่า: 1
ฉันได้รับข้อผิดพลาดการจำศีล ฉันสามารถระบุฟังก์ชันที่ทำให้เกิดปัญหาได้ น่าเสียดายที่มีการเรียก DB หลายครั้งในฟังก์ชัน ฉันไม่พบบรรทัดที่ทำให้เกิดปัญหาเนื่องจากจำศีลลบเซสชันในตอนท้ายของธุรกรรม ข้อผิดพลาดการไฮเบอร์เนตที่กล่าวถึงด้านล่างดูเหมือนว่าข้อผิดพลาดทั่วไป ไม่ได้กล่าวถึงว่า Bean เป็นสาเหตุของปัญหา ใครที่คุ้นเคยกับข้อผิดพลาดจำศีลนี้? org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1 at org.hibernate.jdbc.BatchingBatcher.checkRowCount(BatchingBatcher.java:93) at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:79) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) at …
141 java  hibernate 

4
@Column ไม่ได้รับอนุญาตในคุณสมบัติ @ManyToOne
ฉันมีเอนทิตี JPA ที่มีคุณสมบัติตั้งเป็น @ManyToOne @Column(name="LicenseeFK") private Licensee licensee; แต่เมื่อฉันปรับใช้บน JBoss 6 แอปพลิเคชันแสดงข้อผิดพลาดว่า: org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property ฉันใช้ Hibernate 3.5 เป็นการใช้งาน JPA 2.0 ฉันควรใช้อะไรในการอ้างอิงคอลัมน์ Foreign Key

18
ลำดับ JPA ไฮเบอร์เนต (ไม่ใช่รหัส)
มันเป็นไปได้ที่จะใช้ลำดับ DB สำหรับคอลัมน์บางอย่างที่ไม่ได้ระบุ / ไม่ได้เป็นส่วนหนึ่งของตัวระบุคอมโพสิต ? ฉันใช้ไฮเบอร์เนตเป็นผู้ให้บริการ jpa และฉันมีตารางที่มีคอลัมน์บางคอลัมน์ที่สร้างค่า (โดยใช้ลำดับ) แม้ว่าพวกเขาจะไม่ได้เป็นส่วนหนึ่งของตัวระบุ สิ่งที่ฉันต้องการคือการใช้ลำดับเพื่อสร้างค่าใหม่สำหรับเอนทิตีที่คอลัมน์สำหรับลำดับไม่ได้เป็น(ส่วนหนึ่ง) คีย์หลัก: @Entity @Table(name = "MyTable") public class MyEntity { //... @Id //... etc public Long getId() { return id; } //note NO @Id here! but this doesn't work... @GeneratedValue(strategy = GenerationType.AUTO, generator = "myGen") @SequenceGenerator(name = "myGen", sequenceName …
138 java  hibernate  jpa  sequence 

11
JPA CascadeType.ALL ไม่ได้ลบเด็กกำพร้า
ฉันมีปัญหาในการลบโหนด orphan โดยใช้ JPA ด้วยการแมปต่อไปนี้ @OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "owner") private List<Bikes> bikes; ฉันมีปัญหาของบทบาทที่ถูกทอดทิ้งซึ่งห้อยอยู่รอบ ๆ ฐานข้อมูล ฉันสามารถใช้org.hibernate.annotations.Cascadeแท็กเฉพาะไฮเบอร์เนตคำอธิบายประกอบได้ แต่เห็นได้ชัดว่าฉันไม่ต้องการผูกโซลูชันของฉันเข้ากับการใช้งานไฮเบอร์เนต แก้ไข : ดูเหมือนว่า JPA 2.0 จะรองรับสิ่งนี้ด้วย
136 java  hibernate  orm  jpa  jpa-2.0 

25
คำอธิบายประกอบไฮเบอร์เนต - การเข้าถึงฟิลด์หรือคุณสมบัติใดดีกว่ากัน
คำถามนี้เป็นคำถามที่ค่อนข้างที่เกี่ยวข้องกับHibernate หมายเหตุตำแหน่งคำถาม แต่อยากรู้ว่าอันไหนดีกว่ากัน ? เข้าถึงผ่านคุณสมบัติหรือเข้าถึงผ่านช่อง? ข้อดีข้อเสียของแต่ละอย่างเป็นอย่างไร?
135 java  hibernate  orm  jpa  annotations 

11
Kotlin กับ JPA: นรกตัวสร้างเริ่มต้น
ตามที่ JPA ต้องการ@Entityคลาสควรมีคอนสตรัคเตอร์เริ่มต้น (ไม่ใช่อาร์กิวเมนต์) เพื่อสร้างอินสแตนซ์อ็อบเจ็กต์เมื่อดึงข้อมูลจากฐานข้อมูล ใน Kotlin คุณสมบัติสะดวกมากที่จะประกาศภายในตัวสร้างหลักดังตัวอย่างต่อไปนี้: class Person(val name: String, val age: Int) { /* ... */ } แต่เมื่อคอนสตรัคเตอร์ที่ไม่ใช่อาร์กิวเมนต์ถูกประกาศเป็นตัวสร้างรองจะต้องมีการส่งผ่านค่าสำหรับตัวสร้างหลักดังนั้นจึงจำเป็นต้องมีค่าที่ถูกต้องสำหรับพวกเขาเช่นที่นี่: @Entity class Person(val name: String, val age: Int) { private constructor(): this("", 0) } ในกรณีที่คุณสมบัติมีบางประเภทที่ซับซ้อนมากกว่า just StringและIntและไม่เป็นโมฆะมันดูไม่ดีเลยที่จะระบุค่าสำหรับพวกเขาโดยเฉพาะอย่างยิ่งเมื่อมีโค้ดจำนวนมากในตัวสร้างและinitบล็อกหลักและเมื่อมีการใช้พารามิเตอร์ - - เมื่อพวกเขาจะถูกกำหนดใหม่โดยการสะท้อนรหัสส่วนใหญ่จะถูกเรียกใช้งานอีกครั้ง ยิ่งไปกว่านั้นval-properties ไม่สามารถกำหนดใหม่ได้หลังจากตัวสร้างดำเนินการดังนั้นความไม่เปลี่ยนรูปจึงหายไปด้วย คำถามคือ: โค้ด Kotlin สามารถปรับให้เข้ากับ JPA ได้อย่างไรโดยไม่ต้องทำซ้ำรหัสโดยเลือกค่าเริ่มต้น "magic" …

3
การแม็พตารางการเชื่อมโยงแบบกลุ่มต่อกลุ่มด้วยคอลัมน์พิเศษ
ฐานข้อมูลของฉันมี 3 ตาราง: เอนทิตีผู้ใช้และบริการมีความสัมพันธ์แบบกลุ่มต่อกลุ่มและเข้าร่วมกับตาราง SERVICE_USER ดังนี้: ผู้ใช้ - SERVICE_USER - บริการ ตาราง SERVICE_USER มีคอลัมน์ BLOCKED เพิ่มเติม วิธีใดที่ดีที่สุดในการทำแผนที่ดังกล่าว นี่คือคลาสเอนทิตีของฉัน @Entity @Table(name = "USERS") public class User implements java.io.Serializable { private String userid; private String email; @Id @Column(name = "USERID", unique = true, nullable = false,) public String getUserid() { return this.userid; …

2
ความแตกต่างระหว่าง Save และ saveAndFlush ใน Spring data jpa
ฉันพยายามเรียนรู้ข้อมูลสปริง JPA โดยทดสอบการทำงานของ CRUD ผ่านทางJpaRepository. ฉันเจอสองวิธีsaveและsaveAndFlush. ฉันไม่เข้าใจความแตกต่างระหว่างสองสิ่งนี้ ในการโทรsaveการเปลี่ยนแปลงของฉันกำลังได้รับการบันทึกลงในฐานข้อมูลดังนั้นการใช้saveAndFlushไฟล์.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.