OpenJPA Criteria API - createCriteriaUpdate and createCriteriaDelete

37 views Asked by At

I'm using OpenJPA 3.2.2 and trying some CRUD by OpenJPA - criteria API but got some errors

Exception in thread "main" java.lang.UnsupportedOperationException: JPA 2.1
    at org.apache.openjpa.persistence.criteria.CriteriaBuilderImpl.createCriteriaUpdate(CriteriaBuilderImpl.java:127)
    at org.example.repositories.BaseRepository.deleteById(BaseRepository.java:63)

As my googling, seem like my OpenJPA verssion does not support "createCriteriaUpdate" and "createCriteriaDelete" anymore. I just wanna ensure that the root issue come from me(my code, my configuration) or those methods is depreciated.

My pom.xml:

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <openjpa.version>3.2.2</openjpa.version>
</properties>
<dependencies>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.30</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.openjpa/openjpa-all -->
    <dependency>
        <groupId>org.apache.openjpa</groupId>
        <artifactId>openjpa-all</artifactId>
        <version>${openjpa.version}</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jdt</groupId>
        <artifactId>org.eclipse.jdt.annotation</artifactId>
        <version>2.2.600</version>
    </dependency>
    <dependency>
        <groupId>org.jetbrains</groupId>
        <artifactId>annotations</artifactId>
        <version>16.0.3</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

My method:

@Override
public void deleteById(Long id) {
    System.out.println("deleting...");
    try {
        begin();
        CriteriaBuilder builder = entityManager.getCriteriaBuilder();
        CriteriaUpdate<User> softDelete = builder.createCriteriaUpdate(User.class);
        Root<User> userRoot = softDelete.from(User.class);

        // conditions
        Predicate condition1 = builder.equal(userRoot.get("id"), id);

        softDelete.set("isDeleted", true);
        softDelete.where(condition1);

        int countDeleted = entityManager.createQuery(softDelete).executeUpdate();
        System.out.println(countDeleted);

        commit();
    } catch (OpenJPAException ex) {
        rollback();
        throw new RuntimeException(ex.getMessage());
    }
}

enter image description here

As my googling, seem like my OpenJPA verssion does not support createCriteriaUpdate and createCriteriaDelete anymore. I just wanna ensure that the root issue come from me(my code, my configuration) or those methods is depreciated.

0

There are 0 answers