Không có nhà cung cấp kiên trì cho EntityManager có tên


148

Tôi có persistence.xmlcùng tên với tôi sử dụng TopLinktheo META-INFthư mục. Sau đó, tôi có mã của mình gọi nó bằng:

EntityManagerFactory emfdb = Persistence.createEntityManagerFactory("agisdb");

Tuy nhiên, tôi nhận được thông báo lỗi sau:

2009-07-21 09: 22: 41.018 [chính] LRI - Không có nhà cung cấp kiên trì cho EntityManager có tên agisdb
javax.persistence.PersistenceException: Không có nhà cung cấp kiên trì cho EntityManager có tên agisdb
    tại javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:89)
    tại javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:60)

Đây là persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
    <persistence-unit name="agisdb">
        <class>com.agis.livedb.domain.AddressEntity</class>
        <class>com.agis.livedb.domain.TrafficCameraEntity</class>
        <class>com.agis.livedb.domain.TrafficPhotoEntity</class>
        <class>com.agis.livedb.domain.TrafficReportEntity</class>
        <properties>
            <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/agisdb"/>
            <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="toplink.jdbc.user" value="root"/>
            <property name="toplink.jdbc.password" value="password"/>
        </properties>
    </persistence-unit>
</persistence>

Nó nên có trong classpath. Tuy nhiên, tôi đã nhận được lỗi trên.

Câu trả lời:


85

Sau đó <persistence-unit name="agisdb">, xác định tên nhà cung cấp kiên trì:

<provider>org.hibernate.ejb.HibernatePersistence</provider>

5
Tôi đang sử dụng Derby và không cần thiết phải chỉ định điều này (tôi đã làm, nhưng sau đó đã xóa nó sau khi tôi giải quyết vấn đề, chỉ để đảm bảo). Cuối cùng tôi đã nhận được lỗi vì Tệp bền vững không có trong thư mục src / META-INF, mặc dù nó đã nằm trong một thư mục trong đường dẫn nguồn Eclipse cho dự án. Tôi đang suy nghĩ ở đâu đó có dây cứng để được bật src / *
Fuhrmanator

6
này là không cần thiết trong trường hợp của tôi, nhưng classpathing hibernate-EntityManager * .jar như đã nêu trong Ualter Jr s câu trả lời dưới đây. Tôi đang sử dụng một ứng dụng GWT độc lập với hibernate-core-4.3.7.jar , hibernate-entitymanager-4.3.7.Final.jarhibernate-jpa-2.1-api-1.0.0.jar .
Andreas Dietrich

3
Tương tự với @AndreasDietrich, sau khi thay thế tạo phẩm "hibernate-core-4.3.10" bằng "hibernate-entitymanager-4.3.10" trong pom.xml (tôi sử dụng maven), lỗi này không còn nữa. Trên thực tế, hibernate.org/orm/doads nói rằng bạn nên sử dụng "hibernate-entitymanager-4.3.10" cho JPA.
Hồng

1
Ngoài ra, tôi cũng phải chuyển từ hibernate-entitymanager-3.4.0.GA lên 3.6.10.Final . Chỉ trong trường hợp bạn vẫn có một cơ sở mã di sản bằng Hibernate 3.
Javi Vazquez

5
Tôi hơi ngạc nhiên khi bạn không gặp phải vấn đề gì với mình <provider/>, trong khi sử dụng hibernate-4, bạn nên thay đổi nhà cung cấp của mình thành <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>, xem stackoverflow.com/questions/23041964/ .
Cướp

86

Đặt "hibernate-entitymanager.jar"trong classpath của ứng dụng.
Đối với các phiên bản mới hơn, bạn nên sử dụng "hibernate-core.jar"thay vì không dùng nữahibernate-entitymanager

Nếu bạn đang chạy qua một số IDE, như Eclipse :Project Properties -> Java Build Path -> Libraries.

Nếu không hãy đặt nó trong /libứng dụng của bạn.


3
Mất vài giờ để nhận ra đây là nguyên nhân. Đối với những người khác đang tìm kiếm chiếc bình đẫm máu này, trong trường hợp Hibernate 4.1.3, thì trong hibernate-release-4.1.3.Final \ lib \ jpa \ hibernate-entitymanager-4.1.3.Final.jar
Vedran

7
Và đối với những người trong chúng ta đang sử dụng Maven, đó sẽ là org.hibernateartifactid nhómhibernate-entitymanager
Simon Forsberg

2
Đó là eclipselink.jar đối với tôi, thứ bị thiếu trong đường dẫn. Không có hibernate * Something.jar trong đường dẫn cả.
người dùng không xác định

3
Chỉ mất vài giờ để xác nhận tính bền vững là trên đường dẫn lớp và so sánh mọi khía cạnh của dự án mà dự án này hoạt động và dự án mà nó không hoạt động. Thông báo lỗi rất dễ gây hiểu lầm vì nó có thể xảy ra nếu thiếu tệp Persence.xml, nếu PU có tên đó bị thiếu hoặc rõ ràng là nếu thiếu một hibernate jar!
David Mann

Đối với tôi đó là org.eclipse.persistence.jpavới thử nghiệm phạm vi.
Marek

67

Đảm bảo rằng persistence.xmltệp nằm trong thư mục:<webroot>/WEB-INF/classes/META-INF


8
điều này không hiệu quả với tôi, không tìm thấy đơn vị Kiên trì: lỗi 'null'. Di chuyển nó trở lại /src/main/resource/META-INF/persistence.xml
tomasb

1
Tôi đoán điều này áp dụng cho những người sử dụng toplink (hoặc các nội dung liên quan đến web khác), cho những người khác câu trả lời khác ở đây có thể phù hợp hơn.
Simon Forsberg

2
Cảm ơn, đối với tôi, đường dẫn là mục tiêu / lớp / META-INF
Frizz1977

Tương tự, vì một số lý do kỳ lạ, nó cần phải nằm trong thư mục META-INF, nếu không sẽ không hoạt động ...
Thomas

17

Tôi cần điều này trong tệp pom.xml của mình:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.2.6.Final</version>
</dependency>

Hoạt động cho phiên bản 4.3.11.
petertc

Nó không được dùng nữa, xem ở trên. Sử dụng hibernate-core thay thế.
foo

16

Đối mặt với cùng một vấn đề và không thể tìm thấy giải pháp trong một thời gian khá dài. Trong trường hợp của tôi, nó đã giúp thay thế

<provider>org.hibernate.ejb.HibernatePersistence</provider>

với

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

Lấy giải pháp từ đây


2
Việc nâng cấp từ Hibernate 4.3.5 lên 5.2.12 và việc thay đổi tên nhà cung cấp này đã khắc phục sự cố cho tôi. Cài đặt đó dường như cho phép JPA sử dụng tệp .jar lõi thay vì trình quản lý thực thể .jar hiển thị như không dùng nữa trên kho lưu trữ trung tâm Maven. Cảm ơn rât nhiêu vê nhưng chia sẻ.
joshpt

10

Có một điểm khác: Nếu bạn gặp phải vấn đề này trong môi trường RCP của Eclipse, bạn có thể phải thay đổi thế hệ Factory từ Persistence.createEntityManagerFactorythànhnew PersistenceProvider().createEntityManagerFactory

xem ECF để thảo luận chi tiết về điều này.


Đây là vấn đề chính xác mà tôi gặp phải với org.eclipse.persistence.jpa 2.4.0. Tôi thực sự đã dành 2 giờ để nhổ tóc ra tự hỏi tại sao nó không thể tìm thấy tệp Persisence.xml của tôi. Tất cả các ví dụ dường như không kết hợp điều này. oh tốt ... cảm ơn rất nhiều
Mark Miller

9

Có thể bạn đã xác định một nhà cung cấp như thế <provider>org.hibernate.ejb.HibernatePersistence</provider>nhưng tham khảo một nhà cung cấp khác trong jar. Điều đó đã xảy ra với tôi: nhà cung cấp kiên trì của tôi là openjpa nhưng tôi đang sử dụng eclipselink trong đường dẫn lớp của mình. Hy vọng điều này giúp đỡ!


7

Tư vấn nhanh:

  • kiểm tra xem Persence.xml có trong đường dẫn lớp của bạn không
  • kiểm tra xem nhà cung cấp ngủ đông có trong đường dẫn của bạn không

Với việc sử dụng JPA trong ứng dụng độc lập (bên ngoài JavaEE), nhà cung cấp kiên trì cần được chỉ định ở đâu đó. Điều này có thể được thực hiện theo hai cách mà tôi biết:

  • hoặc thêm phần tử nhà cung cấp vào đơn vị kiên trì: <provider>org.hibernate.ejb.HibernatePersistence</provider>(như được mô tả trong câu trả lời đúng của Chris: https://stackoverflow.com/a/1285436/784594 )
  • hoặc nhà cung cấp cho giao diện javax.persistence.spi.PersistenceProvider phải được chỉ định làm dịch vụ, xem tại đây: http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html (điều này thường là được bao gồm khi bạn bao gồm chế độ ngủ đông hoặc triển khai JPA khác vào đường dẫn lớp của bạn

Trong trường hợp của tôi, tôi phát hiện ra rằng do cấu hình sai của maven, jar hibernate-entitymanager không được bao gồm như một phụ thuộc, ngay cả khi đó là một phụ thuộc nhất thời của mô-đun khác.


/ facepalm - Tôi quên thêm phụ thuộc maven cho nhà cung cấp ngủ đông. Cảm ơn bạn!
jgitter

5

Nếu bạn đang sử dụng Eclipse, hãy đảm bảo rằng mẫu loại trừ không loại bỏ bạn persistence.xmlkhỏi các thư mục nguồn trên đường dẫn xây dựng.

  1. Chuyển đến Thuộc tính -> Đường dẫn xây dựng Java -> tab Nguồn
  2. Kiểm tra mẫu loại trừ của bạn nằm ở
    MyProject/src/main/java -> Excluded: <your_pattern>
    nút cây
  3. Tùy chọn, đặt nó Excluded: (None)bằng cách chọn nút và nhấp vào nút Chỉnh sửa ... ở bên trái.

Giải quyết vấn đề của tôi. Mẫu đã loại trừ được đặt thành "**" sau khi tìm nạp / kéo. Tôi không biết tại sao ...
Jocelyn

5

Tôi đến bữa tiệc muộn vài năm nhưng tôi gặp phải trường hợp ngoại lệ tương tự khi cố gắng để Hibernate 3.5.1 hoạt động với HSQLDB và chương trình JavaFX trên máy tính để bàn. Tôi đã làm cho nó hoạt động với sự giúp đỡ của chủ đề này và rất nhiều thử nghiệm và lỗi. Có vẻ như bạn gặp lỗi này cho một loạt các vấn đề:

No Persistence provider for EntityManager named mick

Tôi đã thử xây dựng các ví dụ hướng dẫn ngủ đông nhưng vì tôi đang sử dụng Java 10 nên tôi không thể khiến chúng xây dựng và chạy dễ dàng. Tôi đã từ bỏ điều đó, không thực sự muốn lãng phí thời gian để khắc phục vấn đề của nó. Thiết lập tệp module-info.java (Jigsaw) là một kiểu tóc khác mà nhiều người chưa phát hiện ra.

Hơi khó hiểu là những cái này (bên dưới) là hai tệp duy nhất tôi cần trong tệp build.gradle của mình. Tài liệu Hibernate không rõ ràng về chính xác những lọ bạn cần đưa vào. Trình quản lý thực thể đã gây nhầm lẫn và không còn cần thiết trong phiên bản Hibernate mới nhất và javax.persistence-api cũng không còn. Lưu ý, tôi đang sử dụng Java 10 ở đây vì vậy tôi phải đưa jaxb-api vào, để khắc phục một số lỗi liên kết xml, cũng như thêm một mục nhập cho mô đun lưu trữ java trong tệp module-info.java của tôi.

Build.gradle

// https://mvnrepository.com/artifact/org.hibernate/hibernate-core
compile('org.hibernate:hibernate-core:5.3.1.Final')

// https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api
compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'

Module-info.java

// Used for HsqlDB - add the hibernate-core jar to build.gradle too
requires java.persistence;

Với chế độ ngủ đông 5.3.1, bạn không cần chỉ định nhà cung cấp, bên dưới, trong tệp kiên trì của bạn. Nếu một cái không được cung cấp, nhà cung cấp Hibernate được chọn theo mặc định.

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

Tệp Tệpenceence phải được đặt trong thư mục chính xác để:

src/main/resources/META-INF/persistence.xml

Bước qua mã nguồn ngủ đông trong trình gỡ lỗi Intellij, nơi nó kiểm tra một phương ngữ, cũng đã ném ngoại lệ chính xác tương tự, vì một thuộc tính phương ngữ bị thiếu trong tệp Persence.xml. Tôi đã thêm cái này (thêm cái đúng cho loại DB của bạn):

<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>

Sau đó, tôi vẫn có ngoại lệ tương tự, vì vậy bước qua trình gỡ lỗi một lần nữa trong Intellij đã tiết lộ thực thể kiểm tra mà tôi đang cố gắng duy trì (ví dụ đơn giản giữa cha mẹ và con) đã bỏ lỡ các chú thích cho các mối quan hệ OneToMany, ManyToOne. Tôi đã sửa lỗi này và ngoại lệ biến mất và các thực thể của tôi vẫn tồn tại ổn.

Đây là tệp bền vững cuối cùng của tôi:

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
            http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
         version="2.1">

<persistence-unit name="mick" transaction-type="RESOURCE_LOCAL">
    <description>
        Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide
    </description>

    <!-- Provided in latest release of hibernate
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    -->

    <class>com.micks.scenebuilderdemo.database.Parent</class>
    <class>com.micks.scenebuilderdemo.database.Child</class>

    <properties>
        <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbc.JDBCDriver"/>

        <property name="javax.persistence.jdbc.url"
                  value="jdbc:hsqldb:file:./database/database;DB_CLOSE_DELAY=-1;MVCC=TRUE"/>

        <property name="javax.persistence.jdbc.user" value="sa"/>
        <property name="javax.persistence.jdbc.password" value=""/>

        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.hbm2ddl.auto" value="create"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
    </properties>

</persistence-unit>

</persistence>

Tôi có lẽ đã lãng phí khoảng nửa ngày cho viên ngọc này. Lời khuyên của tôi sẽ là bắt đầu rất đơn giản - một thực thể thử nghiệm duy nhất có một hoặc hai trường, vì có vẻ như ngoại lệ này có thể có nhiều nguyên nhân.


Cảm ơn rất nhiều cho các chi tiết cấu hình Thực sự đã giúp giải quyết nó.
Doogle

4

Trường hợp góc: nếu bạn đang sử dụng m2Eclipse, nó sẽ tự động đưa vào loại trừ trên các thư mục tài nguyên của bạn. Sau đó, khi bạn cố gắng chạy thử nghiệm bên trong nhật thực, sự vắng mặt tiếp theo của tệp Persence.xml sẽ tạo ra lỗi này.


3

Hãy chắc chắn rằng bạn đã tạo tệp kiên trì trong thư mục 'src'. Tôi đã tạo trong thư mục dự án và đó là vấn đề của tôi.


Eclipse 4.4.0 không muốn lồng các thư mục SRC, vì vậy tôi đã đặt META-INF ở mức cao nhất, nghĩ rằng việc lưu giữ bền vững trên đường dẫn lớp là đủ. KHÔNG PHẢI! Tôi đã phải tự tạo một src / META-INF (trong hệ điều hành) và di chuyển tệp tệp Persence.xml bằng tay. Có lẽ có thể làm điều này trong Eclipse, nhưng tôi không thể tìm ra nó.
Fuhrmanator


2

Nó xảy ra khi người quản lý thực thể đang cố gắng chỉ ra nhiều đơn vị kiên trì. Thực hiện các bước sau:

  1. mở tệp liên quan trong trình chỉnh sửa của bạn (miễn là dự án của bạn đã được đóng trong IDE của bạn)
  2. xóa tất cả các mã liên quan và quản lý thực thể liên quan
  3. lưu các tập tin
  4. mở dự án trong IDE của bạn
  5. bây giờ liên kết db hoặc bảng bạn chọn

2

Tôi đã đối mặt với cùng một vấn đề, nhưng trên phiên bản EclipseLink 2.5.0 .

Tôi đã giải quyết vấn đề của mình bằng cách thêm một tệp jar khác cần thiết ( javax.persistence_2.1.0.v201304241213.jar.jar );

Các lọ cần thiết:
- javax.persistence_2.1.0.v201304241213.jar
- eclipselink.jar
- jdbc.jar (tùy thuộc vào cơ sở dữ liệu được sử dụng).

Tôi hi vọng cái này giúp được.


2

Tôi cũng có lỗi này nhưng vấn đề là không gian tên uri trong persistence.xml.

Tôi thay thế http://xmlns.jcp.org/xml/ns/persistenceđể http://java.sun.com/xml/ns/persistencevà phiên bản 2.1 đến 2.0.

Nó đang hoạt động.


Đó chính xác là những gì đã xảy ra với tôi khi sử dụng Tomcat .. Tôi vừa thêm một tiêu đề đầy đủ để làm rõ cho người dùng mới
childno͡.de

2

Bạn cần thêm hibernate-entitymanager-x.jar trong đường dẫn lớp.

Trong Hibernate 4.x, nếu jar có mặt, thì không cần thêm org.hibernate.ejb.HibernatePersistence trong tệp Persence.xml.


1

Câu hỏi đã được trả lời rồi, nhưng chỉ muốn đăng một mẹo đang giữ tôi lại. Ngoại lệ này đã được ném sau các lỗi trước đó. Tôi đã nhận được điều này:

property toplink.platform.class.name is deprecated, property toplink.target-database should be used instead.

Mặc dù tôi đã thay đổi tệp Persence.xml để bao gồm tên thuộc tính mới:

<property name="toplink.target-database" value="oracle.toplink.platform.database.oracle.Oracle10Platform"/>

Theo thông báo về tên thuộc tính không dùng nữa, tôi nhận được cùng một PersistenceException như trên và một chuỗi các trường hợp ngoại lệ khác. Mẹo của tôi: đảm bảo kiểm tra sự bắt đầu của xúc xích ngoại lệ.

Dường như có một lỗi trong Glassfish v2.1.1 trong đó việc tái cấu trúc hoặc không hợp đồng và triển khai không cập nhật tệp Persence.xml đang được lưu trữ ở đâu đó. Tôi đã phải khởi động lại máy chủ và sau đó nó hoạt động.



1

Bạn cần các tệp jar sau trong classpath:

  1. antlr-2.7.6.jar
  2. commons-sưu tập-3.1.jar
  3. dom4j-1.6.1.jar
  4. ngủ đông-commons-annotations-4.0.1.Final.jar
  5. ngủ đông-lõi-4.0.1.Final.jar
  6. ngủ đông-entitymanager.jar
  7. ngủ đông-jpa-2.0-api-1.0.0.Final.jar
  8. javassist-3.9.0.jar
  9. jboss-log-3.1.1.GA.jar
  10. jta-1.1.jar
  11. slf4j-api-1.5.8.jar
  12. xxx-jdbc-driver.jar


1

Hibernate 5.2.5
Jar Tệp Yêu cầu trong đường dẫn lớp. Đây là trong một thư mục bắt buộc của Hibernate 5.2.5 Bản phát hành cuối cùng. Nó có thể được tải xuống từ http://hibernate.org/orm/doads/

  1. antlr-2.7.7
  2. cdi-api-1.1
  3. bạn cùng lớp-1.3.0
  4. dom4j-1.6.1
  5. el-api-2.2
  6. geronimo-jta_1.1_spec-1.1.1
  7. ngủ đông-commons-annotation-5.0.1.Final
  8. hibernate-core-5.2.5.
  9. ngủ đông-jpa-2.1-api-1.0.0.Final
  10. jandex-2.0.3.
  11. javassist-3.20.0-GA
  12. javax.inject-1
  13. jboss-đánh chặn-api_1.1_spec-1.0.0.Beta1
  14. jboss-logging-3.3.0.
  15. jsr250-api-1.0

Tạo một tệp xml "continence.xml" trong

YourProject / src / META-INF / continence.xml

kiên trì

<?xml version="1.0" encoding="UTF-8"?>

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
         http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
         version="2.1">

<persistence-unit name="sample">

    <class>org.pramod.data.object.UserDetail</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/hibernate_project"/>
        <property name="hibernate.connection.username" value="root"/>
        <property name="hibernate.connection.password" value="root"/>
        <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.format_sql" value="false"/>

        <property name="hibernate.cache.use_second_level_cache" value="false"/>

        <property name="hibernate.archive.autodetection" value="true"/>
    </properties>
</persistence-unit>

  1. vui lòng ghi lại thông tin được đề cập trong thẻ <kiên trì> và phiên bản phải là 2.1.
  2. vui lòng lưu ý thẻ tên <continance-unit>, tên được đề cập là "mẫu" . Tên này cần được sử dụng chính xác trong khi tải

EntityManagerFactor = Persistance.createEntityManagerFactory ("mẫu"); . "mẫu" có thể được thay đổi theo quy ước đặt tên của bạn.

Bây giờ tạo một lớp Thực thể. với tên theo ví dụ UserDetail của tôi, trong gói org.pramod.data.object

UserDetail.java

package org.pramod.data.object;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "user_detail")
public class UserDetail {
    @Id
    @Column(name="user_id")
    private int id;
    @Column(name="user_name")
    private String userName;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }   
    @Override
    public String toString() {
       return "UserDetail [id=" + id + ", userName=" + userName + "]";
    }
}

Bây giờ tạo một lớp với phương thức chính.

HibernateTest.java

package org.pramod.hibernate;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.pramod.data.object.UserDetail;

public class HibernateTest {
    private static EntityManagerFactory entityManagerFactory;

    public static void main(String[] args)  {
        UserDetail user = new UserDetail();
        user.setId(1);
        user.setUserName("Pramod Sharma");

        try {
            entityManagerFactory = Persistence.createEntityManagerFactory("sample");
            EntityManager entityManager = entityManagerFactory.createEntityManager();
            entityManager.getTransaction().begin();
            entityManager.persist( user );
            entityManager.getTransaction().commit();
            System.out.println("successfull");
            entityManager.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

Đầu ra sẽ là

UserDetail [id=1, userName=Pramod Sharma]
Hibernate: drop table if exists user_details
Hibernate: create table user_details (user_id integer not null, user_name varchar(255), primary key (user_id))
Hibernate: insert into user_details (user_name, user_id) values (?, ?)
successfull

1

Trong trường hợp của tôi, trước đây tôi sử dụng ý tưởng để tạo thực thể theo lược đồ cơ sở dữ liệu và persistence.xmlnó được tạo tự động src/main/java/META-INFvà theo https://stackoverflow.com/a/23890419/10701129 , tôi chuyển nó sang src/main/resources/META-INF, cũng được đánh dấu META-INF là nguồn gốc. Nó làm việc cho tôi.

Nhưng chỉ đơn giản là đánh dấu META-INF gốc (nghĩa là src / main / java / META-INF) là gốc nguồn, không hoạt động, điều đó làm tôi bối rối.

và đây là cấu trúc: nhập mô tả hình ảnh ở đây


0

Nếu có các tên khác nhau Persistence.createEntityManagerFactory("JPAService")trong các lớp khác nhau, bạn sẽ gặp lỗi. Bằng cách tái cấu trúc, có thể lấy các tên khác nhau trong trường hợp của tôi. Trong một lớp, lớp được tạo tự động Persistence.createEntityManagerFactory("JPAService")trong private void initComponents(), lớp ContactTable khác với Persistence.createEntityManagerFactory("JPAServiceExtended")trong lớp DBManager.


0

Của tôi đã được giải quyết bằng cách thêm thông tin vào tệp Persence.xml, ví dụ như <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>sau đó đảm bảo rằng bạn có thư viện trên classpath, ví dụ như trong Maven thêm phụ thuộc như

<dependency>
  <groupId>org.eclipse.persistence</groupId>
  <artifactId>eclipselink</artifactId>
  <version>2.5.0</version>
</dependency>

0

Xác nhận tên đơn vị liên tục

<persistence-unit name="com.myapp.model.jpa"
    transaction-type="RESOURCE_LOCAL">    
public static final String PERSISTENCE_UNIT_NAME = "com.myapp.model.jpa";
Persistence.createEntityManagerFactory(**PERSISTENCE_UNIT_NAME**);

0

Trong trường hợp của tôi, đó là về lỗi trong hai thuộc tính như dưới đây. Khi tôi thay đổi chúng 'Không có nhà cung cấp kiên trì cho EntityManager có tên' bị từ chối.

Vì vậy, bạn có thể thử kiểm tra kết nối với các thuộc tính của mình để kiểm tra xem mọi thứ có đúng không.

<property name="javax.persistence.jdbc.url" value="...”/>
<property name="javax.persistence.jdbc.password" value="...”/>

Lỗi lạ, tôi hoàn toàn bối rối vì nó.


0

Thử cũng sao chép thủ công tệp Persence.xml vào thư mục <project root>\bin\META-INF. Điều này đã khắc phục vấn đề trong Eclipse neon bằng EclipseLink 2.5.2cách sử dụng một dự án trình cắm thêm đơn giản.


0

Có cùng một vấn đề, nhưng điều này thực sự có hiệu quả với tôi:

mvn install -e  -Dmaven.repo.local=$WORKSPACE/.repository.

NB: Lệnh maven ở trên sẽ cài đặt lại tất cả các phụ thuộc dự án của bạn từ đầu. Bảng điều khiển của bạn sẽ được tải với các bản ghi dài dòng do yêu cầu mạng mà maven đang thực hiện.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.