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

Java Persistence API (JPA) เป็นข้อกำหนดคุณสมบัติ Java สำหรับการเข้าถึงการคงอยู่และการจัดการข้อมูลระหว่างวัตถุ / คลาส Java และฐานข้อมูลเชิงสัมพันธ์ เป็นส่วนหนึ่งของข้อกำหนด EJB 3.0 และเป็นแนวทางมาตรฐานอุตสาหกรรมสำหรับ Object to Relational Mapping (ORM)

6
"ด้านผกผันของสมาคม" ใน JPA OneToMany / ManyToOne แบบสองทิศทางคืออะไร
ในส่วนตัวอย่างของการ@OneToManyอ้างอิงคำอธิบายประกอบ JPA : ตัวอย่าง 1-59 @OneToMany - ระดับลูกค้าพร้อม Generics @Entity public class Customer implements Serializable { ... @OneToMany(cascade=ALL, mappedBy="customer") public Set<Order> getOrders() { return orders; } ... } ตัวอย่าง 1-60 @ManyToOne - คลาสคำสั่งซื้อกับ Generics @Entity public class Order implements Serializable { ... @ManyToOne @JoinColumn(name="CUST_ID", nullable=false) public Customer getCustomer() { return …

10
วิธีแปลงพร็อกซีไฮเบอร์เนตเป็นวัตถุเอนทิตีจริง
ในระหว่างการไฮเบอร์เนตSessionฉันกำลังโหลดวัตถุบางอย่างและบางส่วนถูกโหลดเป็นพร็อกซีเนื่องจากการโหลดแบบสันหลังยาว ไม่เป็นไรและฉันไม่ต้องการปิดการโหลดแบบขี้เกียจ แต่ต่อมาฉันต้องส่งวัตถุบางอย่าง (จริง ๆ แล้ววัตถุหนึ่งชิ้น) ไปยังไคลเอนต์ GWT ผ่าน RPC และมันเกิดขึ้นว่าวัตถุรูปธรรมนี้เป็นตัวแทน ดังนั้นฉันต้องเปลี่ยนมันเป็นวัตถุจริง ฉันไม่พบวิธีเช่น "materialize" ใน Hibernate ฉันจะเปลี่ยนบางสิ่งบางอย่างจากพร็อกซีไปยัง reals รู้คลาสและ ID ของพวกเขาได้อย่างไร ในขณะนี้ทางออกเดียวที่ฉันเห็นคือการขับไล่วัตถุนั้นออกจากแคชของไฮเบอร์เนตและโหลดใหม่ แต่มันก็แย่มากด้วยเหตุผลหลายประการ

12
จะคงคุณสมบัติของชนิดรายการ <String> ใน JPA ได้อย่างไร
วิธีที่ฉลาดที่สุดในการรับเอนทิตีที่มีฟิลด์ชนิดรายการยังคงอยู่คืออะไร Command.java package persistlistofstring; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.persistence.Basic; import javax.persistence.Entity; import javax.persistence.EntityManager; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Persistence; @Entity public class Command implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) Long id; @Basic List&lt;String&gt; arguments = new ArrayList&lt;String&gt;(); public static void main(String[] args) { Command …
158 java  orm  jpa 

7
JPA OneToMany ไม่ได้ลบเด็ก
ฉันมีปัญหากับการ@OneToManyแม็พแบบง่าย ๆระหว่างพาเรนต์และเอนทิตีย่อย ทั้งหมดทำงานได้ดีมีเพียงบันทึกของเด็กที่ไม่ถูกลบเมื่อฉันลบออกจากคอลเลกชัน ผู้ปกครอง: @Entity public class Parent { @Id @Column(name = "ID") private Long id; @OneToMany(cascade = {CascadeType.ALL}, mappedBy = "parent") private Set&lt;Child&gt; childs = new HashSet&lt;Child&gt;(); ... } เด็ก: @Entity public class Child { @Id @Column(name = "ID") private Long id; @ManyToOne(cascade = CascadeType.ALL) @JoinColumn(name="PARENTID", nullable = false) …
158 java  jpa  jpa-1.0 

16
วิธีดูแบบสอบถาม SQL ที่ออกโดย JPA
เมื่อรหัสของฉันโทรออกเช่นนี้: entityManager.find(Customer.class, customerID); ฉันจะดูแบบสอบถาม SQL สำหรับการโทรนี้ได้อย่างไร สมมติว่าฉันไม่มีสิทธิ์เข้าถึงเซิร์ฟเวอร์ฐานข้อมูลเพื่อทำโปรไฟล์ / ตรวจสอบการโทรมีวิธีบันทึกหรือดูภายใน IDE ของฉันเกี่ยวกับการสืบค้น SQL ที่สอดคล้องกันที่ออกโดยการเรียก JPA หรือไม่ ฉันใช้ SQL Server 2008 R2 กับไดรเวอร์ jTDS
155 java  jpa 

7
เมื่อใช้ getOne และ findOne วิธี Spring Data JPA
ฉันมีกรณีใช้งานซึ่งมันเรียกสิ่งต่อไปนี้: @Override @Transactional(propagation=Propagation.REQUIRES_NEW) public UserControl getUserControlById(Integer id){ return this.userControlRepository.getOne(id); } สังเกตการแพร่กระจาย@Transactionalมี. REQUIRES_NEWและที่เก็บใช้getOne เมื่อฉันเรียกใช้แอพฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้: Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session ... แต่ถ้าผมเปลี่ยนgetOne(id)โดยfindOne(id)ทั้งหมดทำงานได้ดี BTW ก่อนที่กรณีการใช้งานจะเรียกเมธอดgetUserControlByIdมันได้เรียกใช้เมธอดinsertUserControl แล้ว @Override @Transactional(propagation=Propagation.REQUIRES_NEW) public UserControl insertUserControl(UserControl userControl) { return this.userControlRepository.save(userControl); } ทั้งสองวิธีเป็นPropagation.REQUIRES_NEWเพราะฉันใช้การควบคุมการตรวจสอบอย่างง่าย ฉันใช้getOneวิธีการเพราะมันถูกกำหนดไว้ในส่วนต่อประสานJpaRepositoryและส่วนต่อประสานที่เก็บของฉันขยายจากตรงนั้นฉันทำงานกับ JPA แน่นอน JpaRepositoryอินเตอร์เฟซที่ยื่นออกมาจากCrudRepository วิธีการที่กำหนดไว้ในfindOne(id)CrudRepository คำถามของฉันคือ: ทำไมgetOne(id)วิธีการล้มเหลว? เมื่อใดที่ฉันควรใช้getOne(id)วิธีการ? ฉันกำลังทำงานกับที่เก็บอื่น …

4
โปรดอธิบายเกี่ยวกับ insertable = false และ updatable = false ในการอ้างอิงถึงคำอธิบายประกอบ JPA @Column
หากมีการเพิ่มความคิดเห็นของเขตข้อมูลinsertable=false, updatable=falseหมายความว่าคุณไม่สามารถแทรกค่าหรือเปลี่ยนค่าที่มีอยู่ได้ใช่หรือไม่ ทำไมคุณต้องการทำเช่นนั้น? @Entity public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @OneToMany(mappedBy="person", cascade=CascadeType.ALL) private List&lt;Address&gt; addresses; } @Entity public class Address { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @ManyToOne @JoinColumn(name="ADDRESS_FK") @Column(insertable=false, updatable=false) private Person person; }

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

29
ไม่มีผู้ให้บริการที่มีอยู่สำหรับ EntityManager ชื่อ
ฉันมีpersistence.xmlชื่อเดียวกันโดยใช้TopLinkภายใต้META-INFไดเรกทอรี จากนั้นฉันมีรหัสเรียกด้วย: EntityManagerFactory emfdb = Persistence.createEntityManagerFactory("agisdb"); ยังฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้: 2009-07-21 09: 22: 41,018 [main] ข้อผิดพลาด - ไม่มีผู้ให้บริการความคงทนสำหรับ EntityManager ชื่อ agisdb javax.persistence.PersistenceException: ไม่มีผู้ให้บริการที่มีอยู่สำหรับ EntityManager ชื่อ agisdb ที่ javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:89) ที่ javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:60) นี่คือpersistence.xml: &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"&gt; &lt;persistence-unit name="agisdb"&gt; &lt;class&gt;com.agis.livedb.domain.AddressEntity&lt;/class&gt; &lt;class&gt;com.agis.livedb.domain.TrafficCameraEntity&lt;/class&gt; &lt;class&gt;com.agis.livedb.domain.TrafficPhotoEntity&lt;/class&gt; &lt;class&gt;com.agis.livedb.domain.TrafficReportEntity&lt;/class&gt; &lt;properties&gt; &lt;property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/agisdb"/&gt; &lt;property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/&gt; &lt;property …
148 java  jpa  persistence  toplink 

7
วิธีดึงข้อมูลการเชื่อมโยง FetchType.LAZY กับ JPA และไฮเบอร์เนตใน Spring Controller
ฉันมีคลาสบุคคล: @Entity public class Person { @Id @GeneratedValue private Long id; @ManyToMany(fetch = FetchType.LAZY) private List&lt;Role&gt; 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 …

14
สปริง JPA เลือกคอลัมน์ที่เฉพาะเจาะจง
ฉันใช้ Spring JPA เพื่อดำเนินการฐานข้อมูลทั้งหมด อย่างไรก็ตามฉันไม่รู้วิธีเลือกคอลัมน์เฉพาะจากตารางใน Spring JPA ตัวอย่างเช่น: SELECT projectId, projectName FROM projects

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
จะทดสอบที่เก็บข้อมูล Spring ได้อย่างไร
ฉันต้องการพื้นที่เก็บข้อมูล (พูดUserRepository) ที่สร้างขึ้นด้วยความช่วยเหลือของ Spring Data ฉันยังใหม่กับ Spring-data (แต่ไม่ใช่ฤดูใบไม้ผลิ) และฉันใช้บทช่วยสอนนี้ ตัวเลือกของเทคโนโลยีสำหรับจัดการกับฐานข้อมูลคือ JPA 2.1 และ Hibernate ปัญหาคือฉันไม่รู้วิธีเขียนการทดสอบหน่วยสำหรับที่เก็บดังกล่าว ลองใช้create()วิธีการเช่น ในขณะที่ฉันกำลังทำการทดสอบก่อนฉันควรจะเขียนการทดสอบหน่วยสำหรับมัน - และนั่นคือสิ่งที่ฉันพบปัญหาสามประการ: ขั้นแรกฉันจะฉีดเลียนแบบEntityManagerการใช้งานUserRepositoryอินเทอร์เฟซที่ไม่มีอยู่ได้อย่างไร Spring Data จะสร้างการใช้งานตามอินเทอร์เฟซนี้: public interface UserRepository extends CrudRepository&lt;User, Long&gt; {} อย่างไรก็ตามฉันไม่รู้ว่าจะบังคับให้ใช้การEntityManagerจำลองและการล้อเลียนอื่น ๆ อย่างไร - ถ้าฉันเขียนการใช้งานด้วยตัวเองฉันอาจมีวิธีการตั้งค่าเพื่อEntityManagerให้ฉันใช้การจำลองสำหรับการทดสอบหน่วย (ในฐานะที่เป็นสำหรับการเชื่อมต่อฐานข้อมูลจริงฉันมีJpaConfigurationระดับกำกับด้วย@Configurationและ@EnableJpaRepositoriesที่โปรแกรมกำหนดถั่วDataSource, EntityManagerFactory, EntityManagerฯลฯ - แต่ที่เก็บควรจะทดสอบที่เป็นมิตรและอนุญาตให้มีการเอาชนะสิ่งเหล่านี้) ประการที่สองฉันควรทดสอบการโต้ตอบหรือไม่? มันยากสำหรับฉันที่จะเข้าใจว่าวิธีการใดEntityManagerและQueryควรจะเรียกว่าอะไร (คล้าย ๆ กันverify(entityManager).createNamedQuery(anyString()).getResultList();) เนื่องจากฉันไม่ใช่คนที่เขียนการนำไปใช้ ประการที่สามฉันควรจะทดสอบหน่วยวิธีการสร้างข้อมูลโดยสปริงตั้งแต่แรกหรือไม่? ดังที่ฉันทราบรหัสไลบรารีของบุคคลที่สามไม่ควรผ่านการทดสอบหน่วย - เฉพาะโค้ดที่นักพัฒนาเขียนขึ้นเองเท่านั้นที่ควรได้รับการทดสอบหน่วย …

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