Configure STS with JPA 2.0 using PostgreSQL 9.3 - eclipse

I have an old Spring MVC project which I used to run with Eclipse on JBoss and using JPA 2.0 with (I believe) a PostgreSQL 9.1 DB. Also using Maven as dependencies resolver.
I managed to get the project back from an HDD crash but I couldn't get it to run properly using Eclipse/Tomcat so I thought I might use the opportunity to start using STS (Spring Tool Suite) and get a clean project and just re-insert the code where it belongs.
Sadly, I'm stuck at the very beginning... I created a Spring MVC project with Maven support, but can't set up the JPA 2.0 part.
I went to Project > Properties > Project Facets, checked JPA and clicked on the freshly appeared link "Further configuration required...".
This brought me to the JPA Facet configuration panel where I can choose from two platforms "Generic 2.1" and "EclipseLink 2.5.x". I could only find some noSQL and Oracle support for EclipseLink so I thought I would go for Generic 2.1 (does that mean it's JPA 2.1 ?).
Now I can choose a JPA implementation "User Library" or "Disable Library Configuration".
I tried importing the .jar defined by this maven dependency:
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.1.Final</version>
</dependency>
But it just tells me "The class 'javax.persistence.Convert' is required to be in the selected libraries".
Maybe Hibernate's version of JPA isn't "Generic 2.1" compliant ?
I've seen a few times "you need to download Hibernate tools" but that didn't change anything.
Also, when I try to create a connection using PostgreSQL, I don't have any driver to choose from and if I want to add one, the only one I'm allowed to add is a jdbc-postgres-8.x driver.

After clicking the "Further configuration required..." link, click the download icon
to the right of the (probably empty) list. That will give you a set of libraries that
you can select and download and then choose from afterwards, such as an EclipseLink library.
See the screenshot

Related

diagramTypeProvider must not be null

I am creating a spring mvc using maven and Hibernate as its database, I have a problem on JPA diagram editor I am using Eclipse mars.
After I enable the JPA in the project facets and added an entity in the persistence.xml, every time I click on the Open diagram it shows an error
diagramTypeProvider must not be null
Sadly, you have discovered a bug in Mars: https://bugs.eclipse.org/bugs/show_bug.cgi?id=472835
Follow the instructions there for a workaround.
Install Graphiti 0.11.4.v20150701-1432 from http://download.eclipse.org/graphiti/updates/0.11.4

Adding JSF 2.2 results in "Found multiple versions of the required class javax.faces.FactoryFinder"

I'm wondering how I can use JSF 2.2 (instead of the 2.0.2) in Eclipse?
It seems like there is no official release (only majorra 2.0 and myfaces 2.0.2 are available)
and when I add jsf 2.2 impl and api manually (Project Facets), it tells me: "Found multiple versions of the required class javax.faces.FactoryFinder.".
When i remove the old (myfaces 2.0.2) tomcat fails...
is there a way to make JSF 2.2 run in eclipse as default?
You can both, add the library to your classpath or configure it in jsf preferences, if you've the facet enabled. In the first way you're not telling Eclipse you're using JSF and second way you tell it and you can choose between configuring the classpath yourself or make Eclipse choose which JSF jars you want to use to let it include them.
First of all you need to download the jars from Mojarra's or MyFaces'es site. MyFaces doesn't have 2.2 version implemented as of today.
To just add the library to your classpath, right click on the project and go to Properties, Java build path. Then click on Add JAR or Add External JARs, depending where you have the jar and add the jsf-api and jsf-impl jars.
Otherwise, if you have the project configured as a JSF project, firstly you have to enable the JSF facet, check Project Facets. Then Eclipse will create a submenu inside Project Facets, letting you configure JSF. You can choose disable library configuration and do it the previous way or select User Library:
Then click on the books icon and you can add a new user library. Once added you only need to add required jars. Keep in mind that you need both jsf-api and jsf-impl jars to have it working, as Tomcat is a plain servlet container and doesn't include any JSF implementation out of the box.
Alternatively, you can also place the jsf-impl directly in your Tomcat shared libraries folder. You should drop it in $CATALINA_HOME/lib and every single application you deploy will use the same implementation. In that way you can just reference the jsf-api from your projects and code against it, having the implementation itself into the server's classpath.

How do I add Hibernate to an existing Eclipse project? Is Hibernate the same as JPA?

I have searched. I can't find the exact way that matches what I have. I installed Eclipse for Java EE. I then went to help and install new software. Put in the jboss url, downloaded the Hibernate libraries. Everything went fine. I also installed the JDBC driver for MySQL. I tested it. It works. Downloaded and installed slf4j because I read someone that said to (hey, I'm learning).
I started a new Java EE project, and uh, I'm kind of stuck after that. It's a "Hello World" at the moment.
I can't find out what to do. I've seen tutorials where it says create a Hibernate project, but what if I want to add it later after I start a "normal" project? I don't want to manually look for the Hibernate.jar in the download folder. I installed it and want to know how to get to it.
I also saw lots of things that said JPA and Hibernate. Are they the same thing?
EDIT: I was able to find Hibernate by right clicking on the project, new, scroll down to hibernate. I am still interested in JPA and Hibernate.
JPA stands for "Java Persistence API", and it is a specification. It basically defines the APIs and behaviors of a persistence layer, and there are different implementations of the JPA specification. Hibernate is one of these implementations. There are a few others, e.g.:
http://www.oracle.com/technetwork/middleware/toplink/overview/index.html
http://openjpa.apache.org/
The JPA specification can be found here:
http://jcp.org/aboutJava/communityprocess/final/jsr317/index.html

The import javax.persistence cannot be resolved

I'm currently working on a project that requires EntityManager EntityManagerFacotry and Persistence each from the javax.persistence package. It seems to be for the database service, but the current code is not very well documented. By searching google it seems that there should be an xml file that comes along with this, but there isn't one of those either. I guess my question is simply how do I make these unresolved imports go away? Do I have to add another jar to the build path? It seems that I shouldn't have to since it's been around since 1.5.
Any help is greatly appreciated.
I ran into this same issue and realized that, since I am using spring boot, all I needed to do to resolve the issue was to add the following dependency:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Yes, you will likely need to add another jar or dependency
javax.persistence.* is part of the Java Persistence API (JPA). It is only an API, you can think of it as similar to an interface. There are many implementations of JPA and this answer gives a very good elaboration of each, as well as which to use.
If your javax.persistence.* import cannot be resolved, you will need to provide the jar that implements JPA. You can do that either by manually downloading it (and adding it to your project) or by adding a declaration to a dependency management tool (for eg, Ivy/Maven/Gradle). See here for the EclipseLink implementation (the reference implementation) on Maven repo.
After doing that, your imports should be resolved.
Also see here for what is JPA about. The xml you are referring to could be persistence.xml, which is explained on page 3 of the link.
That being said, you might just be pointing to the wrong target runtime
If i recall correctly, you don't need to provide a JPA implementation if you are deploying it into a JavaEE app server like JBoss. See here "Note that you typically don't need it when you deploy your application in a Java EE 6 application server (like JBoss AS 6 for example).". Try changing your project's target runtime.
If your local project was setup to point to Tomcat while your remote repo assumes a JavaEE server, this could be the case. See here for the difference between Tomcat and JBoss.
Edit: I changed my project to point to GlassFish instead of Tomcat and javax.persistence.* resolved fine without any explicit JPA dependency.
If anyone is using Maven, you'll need to add the dependency in the POM.XML file. The latest version as of this post is below:
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
hibernate-distribution-3.6.10.Final\lib\jpa : Add this jar to solve the issue. It is present in lib folder inside that you have a folder called jpa ---> inside that you have hibernate-jpa-2.0-1.0.1.Final jar
When I ran into this problem, I tracked down enough to fix my problem and move on.
The short version is:
At some point in time Oracle open-sourced J2EE code and the Eclipse foundation took it over.
The transition took a while so information came out during the transition which was transitory in nature. As a result, you might find articles that were only useful during the transition.
The javax.persistence package was moved to a newly named dependency (jakarta.persistence. The persistence package is part of the larger JPA (Java Persistence API). See Intro to JPA.
The Java Persistence API was first released as a subset of the Enterprise JavaBeans 3.0 specification (JSR 220) in Java EE 5. It has since evolved as its own spec, starting with the release of JPA 2.0 in Java EE 6 (JSR 317). JPA was adopted as an independent project of Jakarta EE in 2019. The current release as of this writing is JPA 3.1.
There were issues with SpringBoot pulling in multiple javax.persistence dependencies, Spring-Boot Issue 21220.
Spring and SpringBoot updated their dependencies to use the new location. From Infoq.com, Nov 24, 2022
VMware released the long-anticipated Spring Framework 6 and Spring Boot 3. After five years of Spring Framework 5, these releases start a new generation for the Spring ecosystem. Spring Framework 6 requires Java 17 and Jakarta EE 9 and is compatible with the recently released Jakarta EE 10
If you are on this page looking for answers, most likely it's because your code doesn't compile because it can't find javax.persistence. If this is the case, then you'll either need to:
add the dependency to jakarta.persistence.
Or use older versions of Java and JPA dependencies define classes in the javax.persistence package.
In the future or if you choose to you can rename references from javax.persistence to jakarta.persistence. The same class files in javax.persistence also exist in the jakarta.persistence package.
To fix my problem I added the following dependency:
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
</dependency>
I was using SpringBoot 2.2.2.RELEASE af the time which picked up version 2.2.3 of the jar file (jakarta.persistence-api-2.2.3.jar).
This jar file contained (at least) the following packages:
javax.persistence
javax.persistence.criteria
javax.persistence.metamodel
javax.persistence.spi
based on what my IDE is telling me.
The following articles were helpful for me to get to the solution I needed:
The SO question about this and the answer - https://stackoverflow.com/a/60024749/3281336 which pointed to links I've also included below. Thanks to #Krisz for that.
Explanation of why javax.persistence package was moved to jakarta dependency - https://blogs.oracle.com/javamagazine/post/transition-from-java-ee-to-jakarta-ee This article is good because it gives old dependencies along with the newer dependencies that are needed
SpringBoot 3 & Spring Framework 6 use Jakarta EE 9 - https://www.infoq.com/news/2022/11/spring-6-spring-boot-3-launch/
My solution was to select the maven profiles I had defined in my pom.xml in which I had declared the hibernate dependencies.
CTRL + ALT + P in eclipse.
In my project I was experiencing this problem and many others because in my pom I have different profiles for supporting Glassfish 3, Glassfish 4 and also WildFly so I have differet versions of Hibernate per container as well as different Java compilation targets and so on. Selecting the active maven profiles resolved my issue.
I solved the problem by adding the following dependency
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>2.2</version>
</dependency>
Together with
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
If you are using Gradle with spring boot and spring JPA then add the below dependency in the build.gradle file
dependencies {
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.1.3.RELEASE'
}
In newer hibernate jars, you can find the required jpa file under "hibernate-search-5.8.0.Final\dist\lib\provided\hibernate-jpa-2.1-api-1.0.0.Final". You have to add this jar file into your project java build path. This will most probably solve the issue.
Add this to your dependency if your using maven
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
If you are using Hibernate as a JPA implementation and you are not using Maven/Gradle, the easier way is to download whole bundle instead of jar file one by one.
Go http://hibernate.org/orm/downloads/ and download the latest library, extract the jar from the required folder.
Sad and ashamed to say that after spending 1 hour on same problem (unable to resolve #Entity and javax.persistence) occurring on STS/Eclipse and with all the imports (implementation 'org.springframework.boot:spring-boot-starter-data-jpa'). Turns out it was issue with STS/Eclipse IDE because exactly same code worked on IntelliJ IDE. If nothing works give another IDE a go.
If you are not using Maven/Gradle to import the dependency, simply just download this jar from maven repository and set in build path on Eclipse or your preferred IDE.
https://mvnrepository.com/artifact/javax.persistence/javax.persistence-api/2.2

How to specify Library Provided at Runtime for Hibernate - Eclipse Dali JPA integration

I am trying to add Eclipse Dali JPA integration and to specify Hibernate as the JPA implementation. I have gathered different instructions but am struggling with specifying the user library when configuring the project facet. The page here (http://docs.redhat.com/docs/en-US/JBoss_Developer_Studio/4.0/html/Hibernate_Tools_Reference_Guide/dali_integration.html) shows an option that says Library Provided by Target Runtime but I don't have this option. I have User Library and Disable Library Configuration. I'd rather not download the hibernate jars and store them separately for eclipse configuration when I already have them specified in the project with maven. And the disable option leaves the configuration in error.
Anyone have any tips for getting that option or another suggested Hibernate/JPA configuration within Eclipse?
Thanks all.
If you are already doing library management with Maven and m2e, you should select Disable Library Configuration option. Yours is exactly the scenario that option was intended for. If you specify the errors you get when you follow this approach, someone may be able to help find the complete solution.
Alternatively, follow the User Library option and create a user library using the Hibernate jars you already have locally. There is no need to re-download them.