EclipseLink silently ignores mapping-file from persinstence.xml - java

I've tried to declare converter in my orm.xml file:
orm-pg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_2_1.xsd"
version="2.1">
<converter class="com.example.PgUuidConverter" auto-apply="true"/>
</entity-mappings>
persistence.xml :
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="jpa" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=postgres-ds)</jta-data-source>
<mapping-file>META-INF/orm-pg.xml</mapping-file>
</persistence-unit>
</persistence>
Because the converter was not registered, I've added for debug another mapping-file:
<mapping-file>META-INF/orm-pg2.xml</mapping-file>
This file doesn't exist. To my surprise, the persistence unit has started without even the slightest warning in logs.
Now I'm confused because I have no idea if my converter was not registered because the orm.xml is wrong or because it was simply not loaded.
How can I debug if the mapping-file was loaded succesfully or not? Why the missing files that are referenced are ignored?
I'm deploying in Karaf Container using Aries JPA 2.5.0

Related

setPackagesToScan on EntityManagerFactory when Persistence.createEntityManagerFactory(

With the following code, the EntityManagerFactory's metamodel has no packages/classes.
I'm missing the parallel sessionFactory.setPackagesToScan() in LocalSessionFactoryBean.
EntityManagerFactory emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME, hibernateReactiveProperties());
Metamodel metamodel = emf.getMetamodel();
Mutiny.SessionFactory reactiveSessionFactory = emf.unwrap(Mutiny.SessionFactory.class);
solved by adding class tag for each entity in persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
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">
<persistence-unit name="default" >
<provider>org.hibernate.reactive.provider.ReactivePersistenceProvider</provider>
<class>com.company.EntityClassName</class>
</persistence-unit>
</persistence>

Does persistence.xml support *.xml?

If mine persistence.xml file like this:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="jpa">
<mapping-file>jpaOrm/*.xml</mapping-file>
</persistence-unit>
</persistence>
Can spring-data-jpa load all the XML-terminated files in the jpaOrm folder?
I don't think so, but I guess you tried and already found out that it doesn't work? The reason is that the mapping files are looked up by using ClassLoader#getResource() where the mapping file path is passed in. It does that because the class path is not scannable by default i.e. you can ask for elements on the class path that match a pattern. It can be done of course, but that would hurt performance as class path scanning is one of the most expensive operations.

WebSphere 8 persistence.xml syntax error (expected root element)

Installing my web application to WebSphere Application Server 8 fails due to a syntax error in my persistence.xml. According to my IDE, there is no error. What is the actual problem?
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_1.xsd"
>
<persistence-unit name="myapp">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
</persistence-unit>
</persistence>
Excerpts from stack trace (SystemOut.log):
1:
Caused by: com.ibm.ws.metadata.MetaDataException: CWWJP0040E: The persistence.xml in application PA_Appl, module Appl-0.1.war, has a syntax error at line number: 6, column number: 2.
2:
Caused by: org.xml.sax.SAXParseException: expected root element {http://java.sun.com/xml/ns/persistence}persistence
Please comment, if you need more information.
Try this
<?xml version="1.0" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="myapp">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
</persistence-unit>
</persistence>

Hibernate tools: persistence unit not found

I have created a Hibernate / JPA project and I'd like to create entities from tables.
While the tool works like a charm selecting a pure Hibernate configuration, in the JPA mode it does not work, claiming the absence of the persistence unit
As shown in the following photo, the persistence unit is located in the folder /src/main/resources/META-INF
This is the code of persistence.xml file:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="socialsports" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistenceProvider</provider>
<jta-data-source>jdbc/LiveDataSource</jta-data-source>
</persistence-unit>
</persistence>
This is the result of my attempt to run Hibernate tools to generate entities:
Since it only doesn't work in JPA mode, the use of the deprecated org.hibernate.ejb.HibernatePersistenceProvider could be a problem. Try org.hibernate.jpa.HibernatePersistenceProvider instead.

JPA persistence.xml adding classes

I have a question regarding the class integration in the persistence xml.
Is something like this possible?
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="ranea">
<class>com.dal.pojo.*</class>
</persistence-unit>
</persistence>
I know that this does not work....but I have a rather big database structure and I would appreciate an answere how to include my pojo classes in the persistence unit easily.
If you're using Eclipse, you can right click on persistence and use "synchronize class list".

Categories