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

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

4
ไม่สามารถสร้างตารางฐานข้อมูลชื่อ 'ผู้ใช้' ใน PostgreSQL
ดูเหมือนว่า PostgreSQL ไม่อนุญาตให้สร้างตารางฐานข้อมูลชื่อ 'ผู้ใช้' แต่ MySQL จะอนุญาตให้สร้างตารางดังกล่าว นั่นเป็นเพราะมันเป็นคำสำคัญ? แต่ Hibernate ไม่สามารถระบุปัญหาใด ๆ (แม้ว่าเราจะตั้งค่า PostgreSQLDialect)

4
ข้อยกเว้น NoClassDefFoundError สำหรับ CacheProvider
ฉันเป็นคนใหม่ในฤดูใบไม้ผลิและจำศีลดังนั้นฉันจึงพยายามใช้เว็บแอปพลิเคชันง่ายๆที่ใช้ Spring 3 + hibernate 4 ในขณะที่ฉันเริ่ม Tomcat ฉันมีข้อยกเว้นนี้ java.lang.NoClassDefFoundError: org/hibernate/cache/CacheProvider at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2427) at java.lang.Class.getDeclaredMethods(Class.java:1791) ... Caused by: java.lang.ClassNotFoundException: org.hibernate.cache.CacheProvider at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523) ฉันพบว่าคลาสนี้อยู่ใน hibernate-core สำหรับ hibernate 3 แต่ฉันไม่พบใน hibernate 4 ส่วนของ context.xml ของฉันสำหรับการคงอยู่: <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> <property name="url" value="jdbc:oracle:thin:@IP_Address:SID"/> <property name="username" value="xxx"/> …

2
การแม็พ enum กับสตริงในโหมดไฮเบอร์เนต
ฉันมีโมเดล Category Hibernate: @Entity @Table(name = "category") public class Category { @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name = "id") private long id; @Column(name = "type") private String type; ซึ่งมีฟิลด์สตริงประเภท นอกจากนี้ฉันยังมี Java enum ซึ่งแสดงถึงประเภทของหมวดหมู่: public enum CategoryType { INCOME, OUTCOME; } ซึ่งฉันต้องการใช้แทนประเภทสตริง สร้าง SQL ยอมรับสองค่าที่แตกต่างกันในพารามิเตอร์ varchar นี้อย่างใดอย่างหนึ่งหรือCategoryIncome CategoryOutcomeฉันต้องการให้คลาสโมเดลประเภทยอมรับตัวแปร enum - และแมปกับสตริงเมื่อใดก็ตามที่ไฮเบอร์เนตขอ เป็นไปได้ไหม?
93 java  hibernate  enums 

7
วิธีแมปฟิลด์เอนทิตีที่มีชื่อเป็นคำสงวนใน JPA
@Column(name="open") การใช้ภาษา sqlserver กับ hibernate [SchemaUpdate] Unsuccessful: create table auth_session (id numeric(19,0) identity not null, active tinyint null, creation_date datetime not null, last_modified datetime not null, maxidle int null, maxlive int null, open tinyint null, sessionid varchar(255) not null, user_id numeric(19,0) not null, primary key (id), unique (sessionid)) [SchemaUpdate] Incorrect …

6
Spring Data JPA แมปผลลัพธ์เคียวรีเนทีฟกับ Non-Entity POJO
ฉันมีวิธีการจัดเก็บ Spring Data พร้อมด้วยแบบสอบถามเนทีฟ @Query(value = "SELECT g.*, gm.* FROM group g LEFT JOIN group_members gm ON g.group_id = gm.group_id and gm.user_id = :userId WHERE g.group_id = :groupId", nativeQuery = true) GroupDetails getGroupDetails(@Param("userId") Integer userId, @Param("groupId") Integer groupId); และผมอยากจะ map ผลให้ไม่ Entity GroupDetailsPOJO เป็นไปได้หรือไม่และหากเป็นเช่นนั้นโปรดยกตัวอย่างได้ไหม

11
ไฮเบอร์เนต: แนวทางปฏิบัติที่ดีที่สุดในการดึงคอลเลกชันขี้เกียจทั้งหมด
สิ่งที่ฉันมี: @Entity public class MyEntity { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true) @JoinColumn(name = "myentiy_id") private List<Address> addreses; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true) @JoinColumn(name = "myentiy_id") private List<Person> persons; //.... } public void handle() { Session session = createNewSession(); MyEntity entity = (MyEntity) …

10
วิธีลบเอนทิตีที่มีความสัมพันธ์ ManyToMany ใน JPA (และแถวตารางการเข้าร่วมที่เกี่ยวข้อง)
สมมติว่าฉันมีสองเอนทิตี: กลุ่มและผู้ใช้ ผู้ใช้ทุกคนสามารถเป็นสมาชิกได้หลายกลุ่มและทุกกลุ่มสามารถมีผู้ใช้ได้หลายคน @Entity public class User { @ManyToMany Set<Group> groups; //... } @Entity public class Group { @ManyToMany(mappedBy="groups") Set<User> users; //... } ตอนนี้ฉันต้องการลบกลุ่มออก (สมมติว่ามีสมาชิกหลายคน) ปัญหาคือเมื่อฉันเรียก EntityManager.remove () ในบางกลุ่มผู้ให้บริการ JPA (ในกรณีของฉันคือ Hibernate) ไม่ลบแถวออกจากตารางรวมและการดำเนินการลบล้มเหลวเนื่องจากข้อ จำกัด ของคีย์ต่างประเทศ การเรียกลบ () บน User ใช้งานได้ดี (ฉันเดาว่าสิ่งนี้เกี่ยวข้องกับความสัมพันธ์ที่เป็นเจ้าของ) ดังนั้นฉันจะลบกลุ่มในกรณีนี้ได้อย่างไร วิธีเดียวที่ฉันสามารถทำได้คือโหลดผู้ใช้ทั้งหมดในกลุ่มจากนั้นให้ผู้ใช้ทุกคนลบกลุ่มปัจจุบันออกจากกลุ่มของเขาและอัปเดตผู้ใช้ แต่ดูเหมือนว่าไร้สาระสำหรับฉันที่จะเรียกอัปเดต () กับผู้ใช้ทุกคนจากกลุ่มเพื่อให้สามารถลบกลุ่มนี้ได้
92 java  hibernate  jpa  orm 

4
คำอธิบายประกอบ @Transactional. จะย้อนกลับได้อย่างไร?
ฉันใช้คำอธิบายประกอบนี้สำเร็จสำหรับคลาส Dao และการย้อนกลับใช้ได้กับการทดสอบ แต่ตอนนี้ฉันต้องย้อนกลับโค้ดจริงไม่ใช่แค่การทดสอบ มีคำอธิบายประกอบพิเศษสำหรับใช้ในการทดสอบ แต่คำอธิบายประกอบใดที่มีไว้สำหรับรหัสที่ไม่ใช่การทดสอบ มันเป็นคำถามใหญ่สำหรับฉัน ฉันใช้เวลาหนึ่งวันเพื่อสิ่งนั้นอยู่แล้ว เอกสารอย่างเป็นทางการไม่ตรงตามความต้องการของฉัน class MyClass { // this does not make rollback! And record appears in DB. EmployeeDaoInterface employeeDao; public MyClass() { ApplicationContext context = new ClassPathXmlApplicationContext( new String[] { "HibernateDaoBeans.xml" }); employeeDao = (IEmployeeDao) context.getBean("employeeDao"); } @Transactional(rollbackFor={Exception.class}) public void doInsert( Employee newEmp ) …
91 java  hibernate  spring 

4
จะใช้แคชระดับที่สองในโหมดไฮเบอร์เนตเมื่อใดและอย่างไร
ฉันมีปัญหาในการทำความเข้าใจเมื่อไฮเบอร์เนตถึงแคชระดับที่สองและเมื่อใดที่แคชไม่ถูกต้อง นี่คือสิ่งที่ฉันเข้าใจในปัจจุบัน: แคชระดับที่สองเก็บเอนทิตีระหว่างเซสชันขอบเขตคือ SessionFactory คุณต้องบอกว่าเอนทิตีใดที่จะแคชไม่มีเอนทิตีใดจะถูกแคชโดยค่าเริ่มต้น แคชแบบสอบถามจะเก็บผลลัพธ์ของคิวรีไว้ในแคช สิ่งที่ฉันไม่เข้าใจคือ เมื่อใดที่ไฮเบอร์เนตจะเข้าสู่แคชนี้ สมมติว่าฉันได้ตั้งค่าแคชระดับที่สองแล้ว แต่ไม่ใช่การแคชแบบสอบถาม ฉันต้องการแคชลูกค้าของฉันมี 50000 คน ฉันจะดึงข้อมูลลูกค้าจากแคชด้วยวิธีใดได้บ้าง ฉันคิดว่าฉันสามารถรับได้โดย id จากแคช ซึ่งจะเป็นเรื่องง่าย แต่ก็ไม่คุ้มค่ากับการแคช แต่ถ้าฉันต้องการคำนวณกับลูกค้าทั้งหมดของฉัน สมมติว่าฉันต้องการแสดงรายชื่อลูกค้าแล้วฉันจะเข้าถึงได้อย่างไร ฉันจะหาลูกค้าทั้งหมดได้อย่างไรหากปิดใช้งานการแคชแบบสอบถาม จะเกิดอะไรขึ้นหากมีคนอัปเดตลูกค้ารายใดรายหนึ่ง ลูกค้ารายนั้นจะถูกทำให้แคชเป็นโมฆะหรือลูกค้าทั้งหมดจะไม่ถูกต้อง หรือฉันคิดว่าการแคชผิดทั้งหมด? การใช้แคชระดับที่สองจะเหมาะสมกว่าในกรณีนี้อย่างไร เอกสารไฮเบอร์เนตไม่ชัดเจนเลยว่าแคชทำงานอย่างไรในความเป็นจริง มีเพียงคำแนะนำในการตั้งค่าเท่านั้น อัปเดต: ดังนั้นฉันจึงเข้าใจว่าแคชระดับที่สอง (ไม่มีแคชแบบสอบถาม) จะดีสำหรับการโหลดข้อมูลโดยใช้รหัส ตัวอย่างเช่นฉันมีวัตถุผู้ใช้ที่ฉันต้องการตรวจสอบสิทธิ์ในทุกคำขอในเว็บแอปพลิเคชัน นี่เป็นกรณีที่ดีหรือไม่ที่จะลดการเข้าถึงฐานข้อมูลโดยการแคชผู้ใช้ในแคชระดับที่สอง เช่นเดียวกับที่ฉันจะจัดเก็บ ID ผู้ใช้ในเซสชันหรือที่ใดก็ตามและเมื่อฉันต้องการตรวจสอบสิทธิ์ฉันจะโหลดผู้ใช้โดยใช้รหัสและตรวจสอบสิทธิ์

7
org.hibernate.PersistentObjectException: เอนทิตีแยกที่ส่งผ่านไปยังคงอยู่
ฉันเขียนตัวอย่างเด็กต้นแบบคนแรกของฉันด้วยโหมดไฮเบอร์เนตได้สำเร็จ หลังจากนั้นไม่กี่วันฉันก็เอามันอีกครั้งและอัปเกรดห้องสมุดบางส่วน ไม่แน่ใจว่าฉันทำอะไรไปบ้าง แต่ฉันไม่สามารถทำให้มันกลับมาทำงานได้อีก ใครจะช่วยฉันได้ไหมว่ามีอะไรผิดพลาดในรหัสที่ส่งคืนข้อความแสดงข้อผิดพลาดต่อไปนี้: org.hibernate.PersistentObjectException: detached entity passed to persist: example.forms.InvoiceItem at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:127) at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:799) at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:791) .... (truncated) การทำแผนที่ไฮเบอร์เนต: <hibernate-mapping package="example.forms"> <class name="Invoice" table="Invoices"> <id name="id" type="long"> <generator class="native" /> </id> <property name="invDate" type="timestamp" /> <property name="customerId" type="int" /> <set cascade="all" inverse="true" lazy="true" name="items" order-by="id"> <key column="invoiceId" /> …
90 hibernate 

6
การกำหนดค่าการบันทึกไฮเบอร์เนตโดยใช้ไฟล์กำหนดค่า Log4j XML?
ฉันไม่พบเอกสารใด ๆ เกี่ยวกับวิธีกำหนดค่าการบันทึกของ Hibernate โดยใช้ไฟล์การกำหนดค่าสไตล์ XML สำหรับ Log4j เป็นไปได้หรือไม่หรือฉันใช้ไฟล์คอนฟิกูเรชันสไตล์คุณสมบัติเพื่อควบคุมการบันทึกของไฮเบอร์เนต หากใครมีข้อมูลหรือลิงค์ไปยังเอกสารก็จะขอบคุณ แก้ไข: เพื่อชี้แจงฉันกำลังมองหาตัวอย่างของไวยากรณ์ XML จริงเพื่อควบคุมไฮเบอร์เนต EDIT2: นี่คือสิ่งที่ฉันมีในไฟล์กำหนดค่า XML ของฉัน <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Threshold" value="info"/> <param name="Target" value="System.out"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ABSOLUTE} [%t] %-5p %c{1} - %m%n"/> </layout> </appender> <appender …

4
JpaRepository ไม่รองรับการดำเนินการ DML [ลบคิวรี]
ฉันได้เขียนข้อความค้นหาเพื่อลบวัตถุบางอย่างในส่วนต่อประสานของฉันที่ขยายออกไปJPaRepositoryแต่เมื่อฉันดำเนินการค้นหามันมีข้อยกเว้น! ใครช่วยอธิบายให้ฉันฟังหน่อย คำถาม: public interface LimitRepository extends JpaRepository<CLimit, Long> { @Query("delete from CLimit l where l.trader.id =:#{#trader.id}") void deleteLimitsByTrader(@Param("trader") CTrader trader); } ฉันได้รับข้อผิดพลาดนี้โปรดอธิบายให้ฉันฟังได้ไหมและขอบคุณทุกคน :) ข้อยกเว้น: org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [delete from com.query.domain.CLimit l where l.trader.id =:__$synthetic$__1] at org.hibernate.hql.internal.ast.QueryTranslatorImpl.errorIfDML(QueryTranslatorImpl.java:318) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:369) at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:236) at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1300) at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573) …

8
ไฮเบอร์เนต: ความแตกต่างระหว่าง session.get และ session.load
จาก API ฉันเห็นว่ามันเกี่ยวข้องกับพร็อกซี แต่ฉันไม่พบข้อมูลมากมายเกี่ยวกับพร็อกซีและไม่เข้าใจความแตกต่างระหว่างการโทรsession.getและsession.load. ใครช่วยอธิบายหรือนำฉันไปที่หน้าอ้างอิงได้ไหม ขอขอบคุณ!!

15
ไม่มีลำดับไฮเบอร์เนต
ฉันพยายามอัปเกรดไฮเบอร์เนตจาก 4 เป็น 5 ในโปรเจ็กต์ของฉันด้วย4.2เวอร์ชันฤดูใบไม้ผลิ หลังจากการอัพเกรดนี้ฉันพบข้อผิดพลาดต่อไปนี้ในการติดตามสแต็กของฉันเมื่อฉันเรียกวิธีการอัปเดต 10:53:32,185 ERROR TableStructure:149 - could not read a hi value com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.hibernate_sequence' doesn't exist ฉันเปลี่ยนรหัสที่เพิ่มขึ้นโดยอัตโนมัติพร้อมคำอธิบายประกอบ @GeneratedValue(strategy=GenerationType.AUTO) ข้อผิดพลาดยังคงอยู่
88 java  spring  hibernate 

17
การปิดใช้งานการสร้าง LOB ตามบริบทเนื่องจากเมธอด createClob () ส่งข้อผิดพลาด
ฉันใช้ Hibernate 3.5.6 กับ Oracle 10g ฉันเห็นข้อยกเว้นด้านล่างระหว่างการเริ่มต้น แต่แอปพลิเคชันนั้นทำงานได้ดี สาเหตุของข้อยกเว้นนี้คืออะไร? และจะแก้ไขได้อย่างไร? ข้อยกเว้น การปิดใช้งานการสร้าง LOB ตามบริบทเนื่องจากcreateClob()วิธีการโยนข้อผิดพลาด:java.lang.reflect.InvocationTargetException ข้อมูล เวอร์ชัน Oracle: Oracle Database 10g Enterprise Edition รีลีส 10.2.0.4.0 ไดรเวอร์ JDBC: ไดรเวอร์ Oracle JDBC เวอร์ชัน: 11.1.0.7.0

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