- Modify target ontology selection in queries (use only query hints) to prevent RDF4J driver from spanning application log.
- Fix an issue with cloning instances of
AbstractImmutableMap
(produced byMap.of
) (Bug #264). - Ensure changes done by
@PreUpdate
callback inherited by entity are propagated to repository (Bug #265). - Dependency updates: RDF4J 5.0.2.
- Fix an issue with generating static metamodel under JDK 21 (Bug #257).
- Support using URI/URL as data property values (as RDF simple literal) (Enhancement #256).
- Support target ontology query hint (Enhancement #245).
- Dependency updates: Jena 5.1.0, RDF4J 5.0.1.
- Fix a NPX when calling
EntityManager.isInferred
with lazy loading proxy (Bug #252). - Allow using multiple values for a query parameter that is written into SPARQL
VALUES
clause (Bug #246). - Dependency updates: RDF4J 5.0.0.
- Update note: Still compatible with server 4 and, with the right configuration, also 3. However, if you are passing repository configuration file to JOPA, make sure it uses the new configuration vocabulary.
- Proper implementation of
EntityManager.getReference
after 2.0.0 rewrite (Enhancement #233). - Log JOPA version and build date on persistence unit startup (Enhancement #243).
- Prevent
AssertionError
onEntityManager.flush
calls (Bug #240). - Fix incorrect SOQL to SPARQL translation when traversing reference and using identifier (Bug #234).
- Fix issues with interaction of lazy loading with cascading (Bug #248).
- Dependency updates: RDF4J 4.3.12.
- Move internal API from
jopa-api
to thejopa-impl
module (Enhancement #146). - Modify name resolution in OWL2Java, support prefixes so that terms are better disambiguated without appending the useless
_A
suffix if possible (Enhancement #85). - Remove dependency on AspectJ by rewriting object change tracking and lazy loading (Enhancement #145, #231). See the wiki for details.
- Add support for RDF collections (Enhancement #51).
- Dependency updates: Jena 5.0.0, RDF4J 4.3.11.
- Require Java 17.
- Modify
DefaultClasspathScanner
to handle Spring Boot nested JAR introduced in 3.2.0 (Bug #227).
- Unwrap
IndirectMultilingualString
instances when owner entity is detached from the persistence context.
- Support data properties for referenced list values (Enhancement #209).
- Support using multilingual string as referenced list values (Enhancement #216).
- Fix inconsistent license information (GH #214).
- Dependency updates: Jena 4.10.0, RDF4J 4.3.8.
- Support ignoring removals of inferred values on entity merge into persistence context (Enhancement #189).
- Dependency updates: RDF4J 4.3.7.
- Fix a transaction isolation issue. Now when multiple transactions edit the same data, the one that commits last wins (same behavior as JPA, Bug #202).
- Fix an issue with missing interpretation of prefixes in the
@Sequence
annotation values (Bug #204).
- Fix missing processing of connection pool configuration in RDF4J driver.
- Disambiguate classes of the same name in OWL2Java using a default suffix (Bug #199).
- Modify JOPA Maven plugin parameter mapping so that it does not confuse IDEs (GH #198).
- Provide access to entity class namespace detection (Enhancement #196).
- Dependency updates: RDf4J 4.3.6.
- Fix a possible deadlock in case RDF4J's HTTP client connection pool is exhausted by concurrent requests (Bug #191).
- Introduce a marker
@Property
annotation used on all OWL property mapping annotations. - Dependency updates: AspectJ 1.9.20, RDF4J 4.3.5.
- Add support for MEMBER OF in SOQL/Criteria API (Enhancement #176).
- Support language matching in SOQL/Criteria API (Enhancement #161).
- Allow declaring multiple (or no) scan packages (Enhancement #185).
- Support both legacy and new RDF4J repository config vocabulary.
- Dependency update: RDF4J 4.3.4, Jena 4.9.0.
- Add support for disabling inference when loading an entity (e.g., when loaded with disable inference query hint) (Enhancement #144).
- Add API allowing to check whether an attribute value is inferred (Enhancement #141).
- Support multiple inheritance via interfaces in the object model (Enhancement #157).
- Add implementation of static metamodel generator (Feature #79).
- Rework annotation property value storage (Enhancement #175).
- Dependency updates: RDF4J 4.2.3, Jena 4.8.0, OWL API 5.5.0, AspectJ 1.9.17.
- Removed deprecated Sesame driver (was replaced by RDF4J driver) (#120).
- Removed deprecated query execution ontology API from EntityManager/Query. Was replaced by a query hint.
- Reworked storage of annotation property values. From now on, String annotation property values are always stored as string.
Previously, JOPA attempted to guess if the value was a URI/IRI by parsing the value, which lead to incorrect handling of values containing
:
. Now, only values of type URI/IRI (or entities) will be stored as individuals/resources. - Require Java 11 or later.
- Fix an issue with commutativity of AND in SOQL when selection by entity identifier is used (Bug #178).
- Allow using SPARQL SELECT queries without WHERE keyword (Bug #165).
- Allow disabling generation of annotation fields and the
Thing
class in OWL2Java (Enhancement #170). - Fix
simpleLiteral=true
not being honored when saving annotation property values (Bug #171). - Fix an issue with parsing SOQL queries containing selection by identifier and attribute value.
- Fix selection by identifier in SPARQL when using the OWLAPI driver (was caused by missing support for VALUES).
- Allow selecting entities by identifier in SOQL/Criteria API (Enhancement #138).
- Extend SOQL/Criteria API with additional functions -
lower
,upper
,length
,abs
,ceil
,floor
(Enhancement #152). - Fix an issue with interaction of lazy loading with inferred-valued attributes (Bug #150).
- Fix a possible NPX when unpersisted empty entity is referenced in another entity's equals/hashCode.
- Allow using generic types as plural attribute value elements.
- Support for mapping Java enums to ontological individuals (
owl:ObjectOneOf
) (Feature #60). - Support for mapping Java enums via ordinals or strings (Enhancement #134).
- Support automatic conversion of language-less strings to
LangString
attributes. - Support using
LangString
as query parameters. - Support joining over plural attributes in SOQL/Criteria API (Bug #135).
- Implement stricter cleanup after EMF close (Enhancement #136).
- Allow building a restricted metamodel from a set of entity classes (will be used by static metamodel generator).
- Allow editing inferred attributes (see Wiki for details) (Feature #121).
- Support for
IN
,NOT LIKE
,<>
(!=
) operators in SOQL (and the corresponding operators in Criteria API). (Enhancement #123, #129).
- Allow excluding
@OWLClass
annotated classes from persistence by usingNonEntity
(Enhancement #124). - Update dependencies: SF4J 2.0.6, Logback 1.3.5, Mockito 4.9.0.
- Fix issues in working with
LocalTime
values.
- Fix issues in working with
BigInteger
andBigDecimal
values. - Fix a warning about illegal reflective operations on newer JDKs.
- Add support for disabling inference via query hints (Enhancement #101).
- Allow registering custom attribute converters (Enhancement #118).
- Add RDF4J driver, deprecate Sesame driver (Task #75).
- Dependency updates: SLF4J 2.0.3, Logback 1.3.4.
- Fix support for custom datatypes in Jena driver (Bug #113).
- Fix mapping enums to simple literals (Bug #111).
- Fix an issue with double-wrapped indirect collections when cloning singleton Maps (Bug #114).
- Dependency updates: RDF4J 3.7.7.
- Automatically resolve inferred statements contexts for GraphDB (Enhancement #106).
- Allow configuring Sesame driver to load inferred statements from the default context (See wiki for details).
- Move supported identifier types constants from jopa-impl to jopa-api module.
- Add support for special floating point numeric values NaN, -INF, INF (Bug #108).
- Dependency updates: RDF4J 3.7.6, SLF4J 1.7.36, Logback 1.2.11.
- Make
LangString
extensible (need by JB4JSON-LD). - Fix incorrect implementation of transformation to float in
DatatypeTransformer
. - Dependency updates: OWL API 5.1.20.
- Add a no-arg constructor to
LangString
so that it can be serialized/deserialized by JSON mapping libraries like Jackson. - Fix a classpath scanning issue on Windows.
- Explicitly use UTF-8 encoding when reading mapping file.
- Prevent attempts at using
rdf:type
as property mapping (@Types
should be used instead). - Allow using
LangString
as entity attribute type.
- Support date/time value conversions in SPARQL result mapping.
- Implemented full support for Java 8 date/time API. It is now the preferred way of representing temporal data (#95).
- Do not validate participation constraints on inferred attributes on persist (#98).
- Support mapping lexical form of literals with explicit datatype (#96).
- Allow retrieving entity classes mapping the specified class IRI from
Metamodel
(#99). - Dependency updates - RDF4J 3.7.4, test dependencies, plugins.
- Reload SPARQL-based attribute values when object is retrieved from cache to ensure up-to-date results (#93).
- Support referencing other entity attributes in SPARQL-based attribute queries (#94).
- Dependency updates - RDF4J 3.7.3, SLF4J 1.7.32, Logback 1.2.6 and others.
- Switch back to the resurrected official aspectj-maven-plugin which allows running on JDK up to 16.
- Dependency updates: RDF4J 3.7.2, OWL API 5.1.19.
- Add support for SPARQL-based entity attributes (Feature #65).
- Add support for Criteria API (Feature #20).
- Fix handling of ASK queries with prefixes in the Sesame Driver (Bug #89).
- Dependency updates: AspectJ 1.9.7, RDF4J 3.7.1.
- Dependency updates: RDF4J 3.6.3.
- [JOPA] Support for initialization of static metamodel (has to be created manually for now) (Feature #83).
- Fix issues with building and using the project on Windows (path-related).
- Dependency updates: RDF4J 3.6.0, switched to a different fork of the maven-aspectj-plugin allowing to build the project under JDK 11.
- [JOPA] Fix issues with cached references becoming stale after merge (Bug #81).
- [JOPA] Fix missing support for Windows-like newline characters (CRLF) in queries (Bug #82).
- Fix project build issues on Windows.
- Simplify
PersistenceProvider
implementation discovery (based on JPA spec implementation now). - Dependency updates: RDF4J 3.5.1, Jena 3.17.0.
- [JOPA] Prioritize transient configuration over property mapping in setter/getter aspects (Bug #80).
- [Jena OntoDriver] Support connecting to Jena Fuseki server (Feature #76).
- Dependency updates: RDF4J 3.4.4, OWL API 5.1.17.
- Support using multiple contexts for entity/attribute (Enhancement #73).
- Dependency updates: RDF4J 3.4.3.
- [JOPA] Fix handling of multilingual strings in annotation properties when target type is
Object
. - Allow configuring whether
MultilingualString
should be preferred overString
in situations like above (cz.cvut.jopa.preferMultilingualString
). - Minor code quality improvements.
- [JOPA] Add support for using collections as query parameters (Enhancement #74).
- [Sesame OntoDriver] Retry connection to remote repository when configured to (Feature #72).
- Minor fixes in multilingual string handling.
- Dependency updates: RDF4J 3.4.1.
- [JOPA] Add support for multilingual String attributes (Feature #59).
- Dependency updates: RDF4J 3.4.0, AspectJ 1.9.6.
- Dependency updates: Jena 3.16.0, OWL API 5.1.16, RDF4J 3.3.0.
- Project configuration simplification.
- Minor fix of formatting
java.util.Date
query parameter values.
- Add missing support for mapping
float
attributes.
- [JOPA] Extend XSD constants.
- Dependency update - RDF4J 3.2.2.
- [JOPA] Fix handling of objects with overridden
equals
/hashCode
inPendingReferenceRegistry
.
- [OWLAPI OntoDriver, OWLAPI Utils] - Refactor common code in OWL API OntoDriver and OWL API Utils module. [Task #68]
- [OWL2Java] Support mapping to remote URLs in the IRI mapping file.
- [JOPA] Support
CollectionAttribute
s. [Task #56] - [OWL2Java] Sort imported ontology IRIs to ensure stable ordering of generated vocabulary constants.
- Dependency updates - RDF4J 3.2.1, Jena 3.15.0, SLF4J 1.7.30.
- [OWL2Java] Do not generate id, label, comment, types and properties fields in entities which already inherit them from parent. (Bug #66, thanks to @cristianolongo for reporting and providing a PR with fix)
- [OWL2Java] Ensure ontology IRI is output into generated vocabularies only once even in case of multiple imports.
- [JOPA] Add constants for all DC Terms properties and classes.
- Dependency updates - RDF4J 3.1.4, OWLAPI 5.1.14.
- [JOPA] Support using Java 8 Date/Time API as query parameters.
- [OWL2Java] Log reasons why an ontology could not be imported for transformation.
- Dependency updates - RDF4J 3.1.2.
- [JOPA] Implement basic support for the Semantic Object Query Language (SOQL), an object model-based query language. (Feature #19)
- [JOPA] Support annotation properties of type
Object
, which allow to accommodate both literals and URIs. - Dependency updates - RDF4J 3.1.1.
- [JOPA] Fix an issue with loading entity classes in Spring Boot projects, where classes are in a non-standard location in the JAR (Bug #62).
- [JOPA] Support using entities as query parameters (Feature #61).
- [JOPA] Run IC validation on lazy loaded fetched attributes also in case no value is loaded.
- [OWLAPI OntoDriver] Search also in imported ontologies when loading data.
- Dependency updates - RDF4J 3.1.0, OWLAPI 5.1.13, Jena 3.14.0, AspectJ 1.9.5.
- Upgraded to RDF4J 3.0.2 and OWLAPI 5.1.12.
- Fixed the issue with incorrect treatment of default context specification for attribute of an entity in a different context (Bug #58).
- Upgraded to RDF4J 3.0.1.
- Fixed missing support for lexical form and simple literal plural attributes.
- Automatically generate
toString
method in OWL2Java model transformation.
- Fixed incorrect context handling in
ObjectPropertyCollectionDescriptor
.
- Added support for read-only literal lexical form access. This allows to load the lexical form of literals regardless of their type (Task #50).
- Added support for RDF simple literals, i.e. literals of type
xsd:string
. Simple literals allow to use strings without language tags (Task #53). - Fixed handling of named graphs. Store property assertions in the subject's graph by default (Task #54).
- Fixed incorrect handling of repository credentials in the RDF4J driver.
- Added support for recursive entity descriptors.
- Updated drivers to always use language specified by assertions and removed global language setting from the drivers.
- Upgraded to OWLAPI 5.1.11, Jena 3.12.0 and RDF4J 2.5.3.
- Do not generate error message when directory structure for OWL2Java already exists.
- Fixed issue with parent entity listeners/lifecycle callbacks not being called (Bug #49).
- Fixed problems with using Spring Boot Devtools with JOPA (classloader issues, Task #26).
- Added SKOS vocabulary constants.
- Upgraded to AspectJ 1.9.4, Jena 3.11.0 and RDF4J 2.5.2.
- Generate ASCII-only identifier names (OWL2Java).
- Fixed issues with caching instances referencing partially loaded getReference results.
- Upgraded to Jena 3.10.0, OWLAPI 5.1.10 and RDF4J 2.5.0.
- Implemented support for
EntityManager.getReference
(Feature #46). - Prevent adding
null
into plural attribute collection when value cannot be loaded (Fix). - Upgraded to RDF4J 2.4.5.
- Added support for specifying repository config when creating embedded in-memory and native RDF4J repositories (Feature #41).
- Added supports for Java 8 Streams in the Query API (Feature #45).
- Fixed issues where aspects were not invoked for fields inherited from mapped superclasses.
- Fixed possible infinite loop caused by entity lifecycle callbacks/listeners modifying the entity itself.
- Upgraded to RDF4J 2.4.2.
- Removed several deprecated parts of the API.
- Support for plural annotation properties (Feature #38).
- Fixed incorrect rdf:Property constant.
- Added definitions of a subset of the Dublin Core vocabulary.
- Fixed issues with support of polymorphism in entity attributes.
- Added support for Java 8 Date/Time API (Feature #36).
- Fixed issue with caching instances of classes overriding
equals
/hashCode
. - Upgraded to AspectJ 1.9.2, Jena 3.9.0, OWL API 5.1.7 and RDF4J 2.4.1.
- Support unbound variables in
VariableResult
inSparqlResultMapping
. - Fixed incorrect handling of language on attribute loading.
- More consistent handling of open/close persistence context.
- Removed several unused files, libraries.
- Improved collection cloning.
- Fixed incorrect field cardinality specification in OWL2Java.
- Upgraded to OWLAPI 5.1.6.
- Added
aop.xml
so that load time weaving can be used with JOPA.
- Fixed a critical NPX issue caused by inherited indirect collections not being removed when an entity was detached from the persistence context.
- Reduced memory footprint.
- Configurable generation of Javadoc from rdfs:comment annotations in OWL2Java (Enhancement #35).
- Entity classes generated by OWL2Java implement
Serializable
. - Introduced dedicated classes with constants from RDF, RDFS and OWL namespaces into the API.
- Deprecated
CommonVocabulary
, useRDF
,RDFS
,OWL
andXSD
classes instead.
- Fixed bug SPARQL query parser which prevent the use of property paths together with variables.
- Added support for setting the in-memory storage in Jena and RDF4J driver (Enhancement #32).
- Working on Github Wiki.
- Fixed bug where old object property assertion was not removed on merge (Bug #33).
- Allow to reload file-based storage in OntoDriver (Enhancement #33).
- Use the
ReloadableDataSource
, which can be unwrapped from anEntityManagerFactory
.
- Use the
- Fixes in the Jena driver. Support for consistency checks.
- Do not mark transaction for rollback on
NoResultException
andNoUniqueResultException
. This improves compatibility with Spring declarative transaction support (jopa-spring-transaction
). - Library updates (AspectJ 1.9.1, RDF4J 2.3.1).
- Support for anonymous ontologies in OWLAPI driver.
- Jena OntoDriver implementation (Enhancement #18).
- In-memory, File and TDB storage are supported.
- Fixed bug in cloning instances with circular dependencies (using collections).
- Updated the compiler and AspectJ plugins.
- Fixed dependency conflict in JOPA Maven plugin (Bug #29).
- Fixed incorrect implementation of
contains
in Sesame driver. - Minor memory consumption optimizations.
- Fixed volatile order of generated vocabulary elements (Issue #28).
- Fixed issue with OWL2Java silently ignoring missing imports (Bug #22).
- Upgraded to OWLAPI 5.1.3. Upgraded to OWL2Query 0.5.0.
- Unified OWLAPI version in all project submodules.
- Switched to Openllet in tests (it supports OWLAPI 5).
- Rewrote em.refresh to correspond to JPA behavior (Issue #17).
- Upgraded to the latest RDF4J (2.2.4).
- Generate class names compliant with Java naming conventions (OWL2Java).
- Added support for untyped query parameters to Query API (necessary for
LIMIT
andOFFSET
support). - Also added support for
Query.setFirstResult
.
- Finished implementation of support for result set mapping - EntityResult (Feature #7).
- Fixed issue with PostLoad lifecycle callbacks and listeners not being called for referenced entities (Bug #10).
- Improved performance of the getter/setter Aspect. This also caused smaller memory requirements for tracking persistence context of entities.
- Rewrote persistence provider discovery to work the same as in JPA.
- Better support of the
isLoaded
methods.
- Partial support for SPARQL result set mapping - VariableResult and ConstructorResult (Feature #7).
- Fixed issue with class discovery in JDK 9 (Bug #8, thanks to Yan Doroshenko).
- Log executed query to provide more auditing info.
- Support for credentials specification for accessing remote RDF4J repositories.
- Reworked instance persist to prevent saving pending references before the target instances are saved. This also fixes the problem of prematurely generated IDs.
- Reworked merge to have semantics more corresponding to JPA.
- Allow descriptor specification for TypedQuery results. This allows context to be specified for these results. It also replaces the original possibility of setting context for query, which did not work anyway.
- Added support for language tag specification of String attributes.
- Fixed issue with handling cascading cycles (Bug #4).
- Fixed issue with parsing queries without spaces after variables (Bug #6).
- Fixed issue with loading unmapped properties in Sesame driver.
- Added support for namespace specification.
- Added support for generating subclasses in OWL2Java.
- Improved handling of query result sets.
- Fixed issue with loading classes containing 'class' in name (Bug #5).
- Implemented support for
EntityListener
s. - Escape string parameters in SPARQL native queries.
- Fixed issue with mapped superclass referencing its descendants (Bug #3).
- Fixed issue with cloning content of singleton collections elements.
- Upgraded Sesame driver from Sesame API 2.8.9 to RDF4J 2.2.
- Mark transaction for rollback when exception is thrown in persistence context-related operations.
- Fixed issue with merge overwriting values of references in managed objects (Bug #2).
- Aligned merge implementation with the JPA specification semantics.
- Fixed issue in which second level cache was being bypassed by instances loaded from repository.
- Create default collection instance (currently
ArrayList
,HashSet
) when unable to clone the specified instance. - Minor performance improvements.
- Internal entity lifecycle callbacks support (Lifecycle callback methods declared directly in entity classes).
- Fixed major memory leak in persistence context management.
- Support for single inheritance.
- Added support for datatype property collections in entities.
- Added support for
Query.executeUpdate
, which executes SPARQL Update statements on the repository. (This feature is not supported by OWL2Query, so it only applies to Sesame-backed applications.)
- Fixed issue with merging changes into collections which do not support the
clear
operation (e.g. singleton collections).
- Upgraded to OWL API 4.2.4 - it fixes issues with missing import statements after ontology copy,
- Changed the way transactional snapshot are created in the OWL API driver.
- Refactored metamodel as a preparation for inheritance implementation. Use AspectJ 1.8.9.
- Added support for named native queries. Declaration is similar to JPA, just use
@NamedNativeQuery
or@NamedNativeQueries
on an entity or its mapped superclass and the query will be available in the persistence unit.
- Consistent handling of instances with the same identifier (i.e. the same individual). Only single instance with a given identifier is allowed in one persistence context. But, persisting the same individual as instance of different classes in different persistence contexts is possible.
- Major improvement of instance loading in the Sesame driver
- Fixed bug in
CollectionChangeDetector
, which caused identical collection to behave as different (issue with element ordering)
- More efficient handling of repository connections in the Sesame driver
- Added support for Mapped superclass (
@MappedSuperclass
annotation) - Do not allow non-entities in
EntityManager
operations (e.g.persist
,find
) - conforms to JPA
- Fixed issue with updating value in context,
- Verify integrity constraints on merge
- Generation of Vocabularies improvements - individuals, whole file processing.
- Added support for URI-based types, i.e. now it is possible to use
@Types Set<URI> types
in entities
- Fixed issue with running multiple persistence units in the same VM.
- Implemented support for
EntityManager.unwrap
. Using unwrap, it is possible to get a hold of for example the Sesame in-memory repository used by the Sesame driver (which is otherwise, due to the Sesame API architecture, inaccessible through theRepositoryProvider
.
- Added the possibility to generate only vocabulary using OWL2Java, without the Java object model itself.
- Added support for plain identifiers as values of Annotation and Object properties
- E.g. when an entity has an object property pointing to another individual, but that individual is not mapped by any class in the object model, its URI can now be used as the property value
- Use xsd:int for mapping Java Integer/int values to RDF. Most Java implementations (including JAXB) do it this way.
- Implemented support for typed @Properties fields (i.e. @Properties field can now be a
Map<URI, Set<Object>>
, where values have corresponding types instead of plain strings)