JPA with TopLink: No META-INF/persistence.xml was found in classpath

后端 未结 7 2345
孤独总比滥情好
孤独总比滥情好 2020-12-19 03:04
public class LoginTest {

public static void main(String[] args) {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory(\"IRCBotPU\");
    EntityMan         


        
相关标签:
7条回答
  • 2020-12-19 03:51

    I had the same problem, i was keeping my persistence.xml file in the WebContent/META-INF directory, while the jpa specification says:
    the root of the persistence unit is the WEB-INF/classes directory; the persistence.xml file is therefore contained in the WEB-INF/classes/META-INF directory
    try placing persistence.xml under src/META-INF.

    0 讨论(0)
  • 2020-12-19 03:54

    persistence.xml should not be in your classpath; JAR file that contains persistence.xml in its META-INF folder should.

    0 讨论(0)
  • 2020-12-19 03:55

    Your META-INF/persistence.xml file should look something like this:

    // <persistence>
    //   <persistence-unit name="IRCBotPU">
    //     <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
    //     <!-- All persistence classes must be listed -->
    //     <class>entity.Customer</class>
    //     <class>entity.Order</class>
    //     <class>entity.Item</class>
    //     <properties>
    //       <!-- Provider-specific connection properties -->
    //       <property name="toplink.jdbc.driver" value="<database driver>"/>
    //       <property name="toplink.jdbc.url" value="<database url>"/>
    //       <property name="toplink.jdbc.user" value="<user>"/>
    //       <property name="toplink.jdbc.password" value="<password>"/>
    //       <!-- Provider-specific settings -->
    //       <property name="toplink.logging.level" value="INFO"/>
    //     </properties>
    //   </persistence-unit>
    // </persistence>
    

    Your persistence-unit's name attribute in your persistence.xml doesn't match the value you're passing into the Persistence.createEntityManagerFactory method. Make sure that your persistence-unit name is set to "IRCBotPU".

    0 讨论(0)
  • 2020-12-19 03:56

    I created a folder callled META-INF under src and it works. "marcosbeirigo" answered it already. I do not know why I have to put that persistance.xml in there though. I put it under WebContent/META-INF and did not work

    0 讨论(0)
  • 2020-12-19 03:58

    if you are using IntelliJ or a maven project structure you need to place the entire "META-INF/persistence.xml" file in the in resources(src/resources) folder so that it will move your persistence.xml file into "WEB-INF/classes/persistence.xml" location.

    if you are using eclipse or something else makes the changes accordingly so that it will move the file to WEB-INF/classes/persistence.xml

    anything else did not work for me.

    0 讨论(0)
  • 2020-12-19 04:00

    The error is somewhat misleading. the XML file itself should not be in the classpath; the part of the message saying "META-INF/persistence.xml" means that the directory containing META-INF/persistence.xml should be.

    If your hard drive had the following

    C:\libs\JPA\META-INF\Persistence.xml

    then your classpath should include this

    CLASSPATH=c:\libs\JPA
    

    If META-INF\Persistence.xml were contained in foo.jar, assuming META-INF/Persistence.xml were located on the root folder of the jar, your classpath should have this

    CLASSPATH=C:\<path to jar>\foo.jar
    

    This may seem obvious or redundant but my goal is to make sure we're comparing apples to apples and the CLASSPATH, along with classloading, can be a bugger to deal with.

    So, can you post your CLASSPATH?

    0 讨论(0)
提交回复
热议问题